2.2 值與類型
Lua 是一種 動態類型語言。這意味着變量沒有類型,只有值纔有類型。所有的值都可以被放在變量裏,當作參數傳遞到另一個函數中,並被函數作爲結果返回。(變量不需要定義)
Lua 中有八種基本類型:
nil, boolean, number, string, function, userdata, thread, table.
2.2.1 nil類型
nil 類型只有一種值 nil ,它的主要用途用於標表識和別的任何值的差異;通常,當需要描述一個無意義的值時會用到它。
2.2.2 boolean類型
(1) boolean只有兩種值:false 和 true。
(2) nil 和 false 都能導致條件爲假;而另外所有的值都被當作真。
(3) lua中認爲0和空字符串都爲真。
2.2.3 number類型
Number 只表示實數,lua中沒有整型。
(編譯lua時,可以使用長整數或者單精度浮點型代替數值類型)
可以支持到小數點後14位數
2.2.4 string類型
String 表示一串字符的數組。 Lua
是 8-bit clean
的:字符串可以包含任何 8
位字符,包括零結束符 ('\0
')
2.2.4.1 長括號定義
前面提到引號(‘’、“”)還可以用一種長括號括起來的方式定義
使用區別
2.2.4.2 自動轉換
運行時,Lua會自動在string和numbers之間自動進行類型轉換,當一個字符串使用算術操作符時,string就會被轉成數字。
反過來,當Lua期望一個string而碰到數字時,會將數字轉成string。
..在Lua中是字符串連接符,當在一個數字後面寫..時,必須加上空格以防止被解釋錯。
2.2.4.3 函數轉換
tonumber()函數
tostring()函數
2.2.5 function類型
(1) Lua可以調用(和處理)用 Lua 寫的函數以及用 C 寫的函數
(2)函數是第一類值(和其他變量相同),意味着函數可以存儲在變量中,可以作爲函數的參數,也可以作爲函數的返回值。
函數名和函數加括號的不同
2.2.6 userdata類型
userdata 類型用來將任意 C 數據保存在Lua 變量中。 userdata在Lua中除了賦值和相等比較外沒有預定義的操作。
Lua可以調用lua或者C實現的函數,Lua所有標準庫都是用C實現的。標準庫包括string庫、table庫、I/O庫、OS庫、算術庫、debug庫。
2.2.7 thread類型
thread 類型用來區別獨立的執行線程。2.2.8 table類型
(1)關聯數組可以用任何東西(除了nil)做索引,而不限於數字。
(2)table可以以不同類型的值構成;它可以包含所有的類型的值(除 nil 外)。
(3) table 是lua 中唯一的一種數據結構。
(4)支持以a.name 的形式表示 a["name"]。
(5)跟索引一樣, table 每個域中的值也可以是任何類型(除 nil外)。特別的,因爲函數本身也是值,所以 table 的域中也可以放函數。2.2.9 獲取變量類型的函數
type
可以返回一個描述給定值的類型的字符串