Lua 類型教學 |
|
請參閱 TutorialExamples 以取得有關如何執行範例的說明。我們將使用 print()
函式來列印值或對這些值的運算。括在引數周圍的括號很重要,如果省略將會造成錯誤。
> print("hello") -- print the string hello. hello
數字類型表示浮點數(小數)。自 5.3 版後,整數(非小數)值會有單獨的內部表示方式。不過,這些值也視為屬於「數字」類型。
Lua 允許使用一般運算子對數字進行加減乘除的簡單算術運算。
> print(2+2) 4 > print(2-7) -5 > print(7*8) 56 > print(7/8) 0.875
請注意,數字不會四捨五入為整數。它們是浮點數或實數。我們可以使用 =
運算子將值指定給變數。
> x = 7
> print(x)
7
=
運算子會將數字 7 指定給變數 x
。我們再次使用 print()
函式來列印 x
的值。我們現在可以在其他運算中使用 x
中的值。> x = x * 9 > print(x) 63 > print(x*2) -- will not change the value of x 126 > print(x) 63
有關 Lua 數字類型的更多資訊,你可以參閱 NumbersTutorial。
Lua 也使用字串(亦即文字)類型。若要建立字串,請將文字以 "雙引號"
或 '單引號'
括起來
> print("hello") hello
> who = "Lua user" > print(who) Lua user
..
運算子將字串串接(結合在一起)> print("hello ") hello > print("hello " .. who) -- the variable "who" was assigned above hello Lua user > print(who) Lua user
與其他語言不同,無法使用 +
運算子串接字串。即
> message = "hello " + who stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: ?
有關 Lua 字串類型的更多資訊,你可以參閱 StringsTutorial。
布林值的值可能是 true
或 false
。如果一個值不是 true
,就一定是 false
,反之亦然。not
運算子可以置於布林值之前,使其反相。即 not true
等於 false
。
> x = true > print(x) true > print(not x) false > print(not false) true
==
和不相等 ~=
運算子會根據傳遞給它們的值傳回布林值。> print(1 == 0) -- test whether two numbers are equal false > print(1 == 1) true > print(1 ~= 0) -- test whether two numbers are not equal true > print(true ~= false) -- is true not equal to false? true
請注意,對於指定,你使用單等號 (=
),但是對於比較,你使用雙等號 (==
)。這兩個運算子具有不同的意義,但看起來很相似,常犯的錯誤是寫一個而在意思上指另一個。
有關 Lua 布林值類型的更多資訊,你可以參閱 ExpressionsTutorial。
Lua 有一個稱為表的通用集合資料類型。集合資料類型用於儲存包含其他物件(包括數字、字串,甚至是其他集合)的集合(例如清單、集合、陣列和關聯式陣列)。Lua 是獨特的語言,其中表(即關聯式陣列)用於表示其他所有集合類型。
使用一對大括號 {}
創建表。讓我們創建一個空表
> x = {} > print(x) table: 0035C910
稍後,TablesTutorial 將說明如何使用表格
在 Lua 中,函式會指派給變數,就像數字和字串。函式是使用 function
關鍵字創建的。我們在此創建一個簡單的函式,將會列印友善訊息。
> foo = function () print("hello") end -- declare the function > foo() -- call the function hello > print(foo) -- get the value of the variable "foo" function: 0035D6E8
foo
的值,並顯示(如下表)該值是函式,並有該特定函式的唯一識別碼。因此,如同其他任何值一樣,應該能夠將函式指派給變數,就像其他值一樣,而且我們可以。> x = function() print("hello") end > x() hello > print(x) function: 0035EA20
函式可以是表的一部分
> a = "aeiou" -- a string > b = 13 -- a number > c = function() -- a function > print ("\n\n\tAin't it grand") > end > d = { a, b ,c} -- put them in a table > function printit(tata) -- print their types. >> for key, value in ipairs(tata) do print(key, type(value)) end >> end > printit(d) 1 string 2 number 3 function
稍後,FunctionsTutorial 將說明如何使用函式
nil
是表示沒有可用值的特殊值。如果您嘗試取得不存在的變數,將會得到 nil
> print(x) nil > x = 2.5 > print(x) 2.5
其他地方使用 nil 會在其他教學課程中說明
使用者資料值是 Lua 以外的物件,例如 C 中實作的物件。這些通常在 C 程式庫中的物件公開給 Lua 時產生。您在 Lua 中無法使用使用者資料值進行任何操作(除了傳遞它),它僅可提供給由建立使用者資料的相同 C 程式庫公開的函式。但透過使用稍後課程中說明的元方法,可以讓使用者資料與運算子搭配使用,並具有類似於表的動作。使用者資料是進階主題,在 [Lua 參考手冊] 中有進一步說明
執行緒值可代表獨立(協力)的執行執行緒。稍後在 CoroutinesTutorial 中會進一步說明
您可能已注意到,在我們建立上述變數時,不需要指定我們要建立的變數類型。例如
a = 1
b = "hello"
c = {}
a = 1
a = "hello"
a = {}
由於 Lua 是個反射式語言,我們可以使用 Lua 函式 type()
來取得某特定物件類型的描述。
> x = "123" -- a string > print(x, type(x)) -- show the value of x and its type 123 string > x = x + 7 -- add a number to the string which forces coercion > print(x, type(x)) -- again show the value and type 130 number