1.
語法約定
lua語句用分號結尾,不過如果不寫分號,lua也會自己判斷如何區分每條語句
如:a=1 b=a*2 --這樣寫沒有問題,但不太好看。
建議一行裡有多個語句時用分號隔開
變數名、函式名之類的命名規則與c語言一樣:由字母,下劃線和數字組成,但第乙個字元不能是數字。並且不能和lua的保留字相同。
lua是大小寫敏感的
使用兩個減號--作為單行注釋符,多行注釋使用--[[...--]]
2.
型別
lua是動態型別語言,變數不要型別定義。lua中有8個基本型別分別為:nil、boolean、number、string、userdata、function、thread和table。
同一變數可以隨時改變它的型別,如:
1. a = 10 --number
2. a = "hello" --string
3. a = false --boolean
4. a = --table
5. a = print --function
使用type函式可以得到變數當前的型別,如print(type(a));
nil 所有沒有被賦值過的變數預設值為nil,給變數賦nil可以收回變數的空間。
boolean 取值false和true。但要注意lua中所有的值都可以作為條件。在控制結構的條件中除了false和nil為假,其他值都為真。所以lua認為0和空串都是真。(注意,和c不一樣哦)
number 表示實數,lua中沒有整數。不用擔心實數引起的誤差,lua的numbers可以處理任何長整數。
string 字串,lua中的字串可以存放任何包括0在內的二進位制資料。可以使用單引號或雙引號表示字串,和c一樣使用\作為轉義符。也可以使用或 [[...]]表示字串,它可以表示多行,而且不解釋轉義符(也可以是[=[...]=]、[====]、...用於適應各種型別字串)。另外要注意的是lua中字串是不可以修改的。
function 函式,lua中的函式也可以儲存到變數中,可以作為其它函式的引數,可以作為函式的返回值。
table 表,表是lua特有的功能強大的東東,它是lua中唯一的一種資料結構,它可以用來描述陣列,結構,map的功能。
userdata userdata型別用來將任意c語言資料儲存在lua變數中。例如:用標準i/o庫來描述檔案。
thread 執行緒。由coroutine表建立的一種資料型別,可以實現多執行緒協同操作。
3.
表示式
算術執行符: 加+、減-、乘*、除/、冪^
關係運算子:小於<、大於》、小於等於<=、大於等於》=、等於==、不等~=
邏輯運算子:與and、或or、非not
and和or的運算結果返回值是其中的運算元:
a and b -- 如果a為false,則返回a,否則返回b
a or b -- 如果a為true,則返回a,否則返回b
所以c中的三元運算子a?b:c在lua中可以這樣寫:(a and b) or c
連線運算子:連續兩個小數點..,如:
"hello" .. "world" 結果是 "helloworld"
0 .. 1 結果是 "01",當在乙個數字後面寫..時,必須加上空格以防止被解釋錯。
取長度操作符:一元操作 #
字串的長度是它的位元組數,table 的長度被定義成乙個整數下標 n,它滿足 t[n] 不是 nil 而 t[n+1] 為nil。
4.
基本語法
賦值
a = a + 1
lua裡的賦值還可以同時給多個變數賦值。變數列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變數。如:
a, b = 10, 2*x --相當於a=10; b=2*x
x, y = y, x --交換x和y
如果賦值符左右個數不同時,lua會自動丟棄多餘值或以nil補足
區域性變數
local i = 10
使用local宣告區域性變數,區域性變數只在所在的**塊內有效。
如果不宣告,預設為全域性變數,這個變數在所有lua環境中有效。
**塊是指乙個控制結構內,乙個函式體,或者乙個chunk(變數被宣告的那個檔案或者文字串),也可以直接使用do...end(相當於c中的{})。條件
1. if 條件 then
2. then-part
3. elseif 條件n then
4. elseif-part
5. .. --->多個elseif
6. else
7. else-part
8. end;
迴圈
lua中的迴圈有:while迴圈,repeat-until迴圈,for迴圈和for in迴圈。
迴圈中可以用break跳出,lua語法要求break和return只能是**塊的最後一句(放心,正常的**都是滿足這個要求的,break和 reuturn後面即使有**也是執行不到的,再說了,大不了自己加個do...end好了^_^)如:
1. local i = 1
2. while a[i] do
3. if a[i] == v then break end
4. i = i + 1
5. end
while迴圈
1. while condition do
2. statements;
3. end;
repeat-until迴圈:
1. repeat
2. statements;
3. until conditions;
for迴圈
1. for var=exp1,exp2,exp3 do
2. loop-part
3. end
for將用exp3作為step從exp1(初始值)到exp2(終止值),執行loop-part。其中exp3可以省略,預設step=1
for in迴圈
1. for 變數 in 集合 do
2. loop-part
3. end
實際上,
for var_1, ..., var_n in explist do block end
等價於
1. do
2. local _f, _s, _var = explist
3. while true do
4. local var_1, ... , var_n = _f(_s, _var)
5. _var = var_1
6. if _var == nil then break end
7. block
8. end
9. end 如:
1. a =
2. for k,v in pairs(a) do print(k,v) end
5.
函式
1. function 函式名 (引數列表)
2. statements-list;
3. end;
函式也可以一次返回多個值,如:
1. function foo() return 'a','b','c'; end
2. a,b,c = foo()
在lua中還可以直接定義匿名函式,如
print((function() return 'a','b','c' end)())
Lua基本語法 Redis使用Lua指令碼
lua 學習目標是 能寫一些 lua指令碼。redis 使用lua 5.1 版本。lua是動態型別語言。1.資料型別 空 nil 沒有賦值的變數或表的字段 都是nil 布林 boolean 包含 true 和 false 字串 string 如 a 或 a 表 table 既可以是 陣列 又可以是 ...
二 Lua 基本語法
上一節 一 lua 資料型別及表達示 本節內容要點 lua的基本語法賦值語句 a 10 name al ex 也可以同時對多個變數進行賦值,以變數的個數為基礎,沒有匹配的變數將會賦值為nil。如果賦值語句個數多餘變數個 數,則會忽略多餘的賦值語句 a b 10,20 a,b 10,20,30 a,b...
LUA學習(二) 基本語法
eg1 print hello world 輸出函式 hello world lua語句是解釋語言,邊編譯邊執行,每句不用分號結束。eg2 變數有值的時候才有型別,否則變數本身是無型別的 a 1 b abc c d print print type a print type b print type...