第2章 型別和值

2022-05-07 01:27:09 字數 1413 閱讀 9927

lua 是動態型別語言,變數不要型別定義。lua 中有 8 個基本型別分別為:nil、boolean、 number、string、userdata、function、thread 和 table。函式 type 可以測試給定變數或者值 的型別。

變數沒有預定義的型別,每乙個變數都可能包含任一種型別的值。

注意上面最後兩行,我們可以使用 function 像使用其他值一樣使用。一般情況下同一變數代表不同型別的值會造成混亂,最好不要用,但是特殊 情況下可以帶來便利,比如 nil。

2.1 nil


lua 中特殊的型別,他只有乙個值:nil;乙個全域性變數沒有被賦值以前預設值為 nil;

給全域性變數負 nil 可以刪除該變數。 

2.2 booleans

兩個取值 false 和 true。但要注意 lua 中所有的值都可以作為條件。在控制結構的條 件中除了 false 和 nil 為假,其他值都為真。所以 lua 認為 0 和空串都是真。

2.3 numbers

表示實數,lua 中沒有整數。一般有個錯誤的看法 cpu 運算浮點數比整數慢。事實 不是如此,用實數代替整數不會有什麼誤差(除非數字大於 100,000,000,000,000)。lua 的 numbers 可以處理任何長整數不用擔心誤差。你也可以在編譯 lua 的時候使用長整型 或者單精度浮點型代替 numbers,在一些平台硬體不支援浮點數的情況下這個特性是非常有用的。和其他語言類似,數字常量 的小數部分和指數部分都是可選的,數字常量的例子:

2.4 strings

指字元的序列。lua 是 8 位位元組,所以字串可以包含任何數值字元,包括嵌入的 0。 這意味著你可以儲存任意的二進位制資料在乙個字串裡。lua 中字串是不可以修改的, 你可以建立乙個新的變數存放你要的字串,如下:

string 和其他物件一樣,lua 自動進行記憶體分配和釋放,乙個 string 可以只包含乙個 字母也可以包含一本書,lua 可以高效的處理長字串,1m 的 string 在 lua 中是很常見 的。可以使用單引號或者雙引號表示字串

為了風格統一,最好使用一種,除非兩種引號巢狀情況。對於字串中含有引號的 情況還可以使用轉義符\來表示。lua 中的轉義序列有:

執行時,lua 會自動在 string 和 numbers 之間自動進行型別轉換,當乙個字串使 用算術操作符時,string 就會被轉成數字。

反過來,當 lua 期望乙個 string 而碰到數字時,會將數字轉成 string。

..在lua中是字串連線符,當在乙個數字後面寫..時,必須加上空格以防止被解釋錯。

儘管字串和數字可以自動轉換,但兩者是不同的,像10 == "10"這樣的比較永遠 都是錯的。如果需要顯式將 string 轉成數字可以使用函式 tonumber(),如果 string 不是正 確的數字該函式將返回 nil。

反之,可以呼叫 tostring()將數字轉成字串,這種轉換一直有效:

第5章 基元型別 引用型別與值型別 (2)

所有的值型別都繼承自system.valuetype,而system.valuetype繼承自system.object。它重寫了system.object中的equals方法和gethashcode方法。當定義自己的值型別時我們也應重寫equals方法和gethashcode方法,為它們提供乙個顯...

第2章 變數和基本型別

這章要學會的 2.1 基本內建型別 2.2 字面值常量 2.3 變數 2.4 const限定符 2.5 引用 2.6 typedef 名字 2.7 列舉 2.8 類型別 型別告訴我資料代表什麼意思以及可以對資料執行哪些操作.型別確定了資料和操作在程式中的意義。c 提供了通過組合現有類產生新類的方法。...

第2章 變數和基本型別

1.算術型別 bool 取值為真或假 int 16位 65536long 32位 4 294 967 296 longlong 64位 18 446 744 073 709 551 616 int 64 64位 18 446 744 073 709 551 616 2.由單引號括起來的乙個字元稱為c...