一、數據類型
與C++相同的:string 字符串類型,boolean 布爾類型
不相同的:nil 空
number數值類型
userdata 自定義類型
function函數類型
thread線程類型
table表類型
這裏重點講一下表類型(table),表類型類似數組或容器,他可以存儲多個對象,但是表類型更爲靈活,表類型實現了一個關聯數組。換句話來說,數組可以用任何東西做索引,而不限於數字。表可以以不同類型的值構成,它可以包含所有類型的值。
表是lua中唯一一個數據結構,我們可以用a.name或者a["name"]來訪問表內的對象。
二、註釋
1.多行註釋:
--[[
......
......
--]]
2.單行註釋:
--單行註釋內容
三、表達式
運算符:
1.關係運算符 < > <= >= == ~=
其中,== 和~=用來比較兩個值,有時也會是函數或表,只要類型不同返回的結果就是false。nil只和自己相等。
2.邏輯運算符 and or not
邏輯運算符除了nil和false之外,其他數值都爲真。這其中包括了“0”。需注意的是 and 和 or 並不是返回一個真或假的數值,而是返回兩個操作數變量的其中一個,“a and b”如果a爲真返回b否則返回a,“a or b”如果a爲真返回a否則返回b。
理解一下"(a and b)or c" == "(a?b:c)"。
3.鏈接運算符 ..
print(0 .. 1) --輸出01,相當於C++中的加號print("10"+1)輸出101,而在lua中print("10"+1) 輸出11
四、運算符的優先級
(從高到低)
^
not -(unary)
* /
+ -
..
< > <= >= ~= ==
and
or
重點在lua中有一個構造運算符{}(大括號),在C++,JAVA中表示數組,在lua中表示表類型。構造器是創建和初始化表的表達式。可以直接創建空表,也可以初始化表。
注意:表類型數值下表是從“1”開始的,不推薦從“0”開始,否則很多的標準庫不能使用。
例子:
a = { [ f(1) ] = g; "x", "y"; x = 1,f(x),[30] = 23; 45 }
days = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saterday" }
print( days[1] ) -- >sunday
w = { x=0,y=0, label = "console" }
x = { sin(0), sin(1), sin(2) }
w[1] = " another field "
x.f = w
print ( w["x"] ) -->0,此處是w = { x=0,y=0, label = "console" }中尋找“x”
print ( w[1] )-->another field
print ( x.f[1] ) -->another field
w.x = nil -->移除域“x” 變爲w = { y=0, label = "console" }