Types and Values
Lua的變數型態完全取決於assign的值,而Lua有8個基本資料型態nil、boolean、number、string、userdata、function、thread和 table等。Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > print(type(a)) nil > a="hello" > print(type(a)) string > a=3*5 > print(type(a)) number > a=function() end > print(type(a)) function > a=true > print(type(a)) boolean
nil
nil和C/Java Script的null意思差不多,當宣告一個變數還沒有給值,預設值就是nil,而當給變數nil就相當於delete這個變數。> x = {} > x["y"] = 1 > for k,v in pairs(x) do >> print(k,v) >> end y 1 > x["y"] = nil -- 將y自x中移除 > for k,v in pairs(x) do >> print(k,v) >> end > -- 沒有印出y了
booleans
說到boolean大家應該都知道boolean只有兩種值,true/false,在lua中,除了nil和false是false以外,其他都是true。not則是反轉boolean。> print(x) nil > print(not not x) false > x=0 > print(not not x) true -- 和C不同唷 > x=false > print(not not x) false > x = function() end > print(not not x) true
numbers
Lua中沒有整數(integer),數值(numbers)是用雙精度儲存(double-precision floating-point)。strings
Lua中的字串是儲存8-bit的字元,所以您可以儲存任何的資訊,和C不同的地方是C用null-terminated("\0"當結數符號),而Lua會用length紀錄字串長度。當Lua中的字串是不能改變的,一旦改變就等同重新建立一個新字串,這點和C也不同。
Lua的字串除了可以用雙引號和單引號表示外,還可以用 [[...]]表示。
> s1="test1" > s2='test2' > s3=[[ >> test1 >> test2 >> ]] > print(type(s3)) string > print(s3) test1 test2
Lua中字串可以用..串接在一起。
和JavaScript一樣,Lua在字串和數字之間的數學運算會試著將字串轉成數字,轉失敗就會出現error。
> print(10 .. "1") 101 > print(10 + "1") 11 > print(10 .. "x") 10x > print(10 + "x") stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: ?
table
table也稱為associative arrays,key可以是任何的資料型態,除了nil以外,都可以當key(或稱index),而任何其值可以是任何的資料型態,其表示法和一般C的array類似都是用"[]"來取值。> x = { [1] = "one", ["2"] = "two", [3.0] = "three", } > print(x[1]) one > print(x["2"]); print(x[3.0]) two three