lua中的基本語法

Lua像C和PASCAL幾乎支持所有的傳統語句:賦值語句、控制結構語句、函數調用等,同時也支持非傳統的多變量賦值、局部變量聲明
賦值語句:
賦值是改變一個變量的值和改變表域的最基本的方法

a = "hello" .. "world"   --改變一個變量的值
t.n = t.n + 1   --改變一個表域的值

多個賦值:
Lua可以對多個變量同時賦值,變量列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變量

a, b = 10, 2*x <--> a=10; b=2*x

當變量個數和值的個數不一致時,Lua會一直以變量個數爲基礎採取以下策略:
a. 變量個數>值的個數按變量個數補足nil
b. 變量個數<值的個數多餘的值會被忽略

a, b, c = 0, 1
print(a,b,c) --> 0 1 nil  變量個數爲3,值的個數爲2,後面直接補足nil
a, b = a+1, b+1, b+2 -- value of b+2 is ignored 變量2個,值3個,最後一個值無用
print(a,b) --> 1 2
a, b, c = 0
print(a,b,c) --> 0 nil nil 變量3個,值1個,後兩個變量爲nil

局部變量
使用local創建一個局部變量,與全局變量不同,局部變量只在被聲明的那個代碼塊內有效。代碼塊:指一個控制結構內,一個函數體

x = 10
local i = 1 -- local to the chunk
while i<=x do
    local x = i*2 -- local to the while body
    print(x) --> 2, 4, 6, 8, ...
    i = i + 1
end
if i > 20 then
    local x -- local to the "then" body
    x = 20
    print(x + 2)
else
    print(x) --> 10 (the global one)
end
print(x)    --> 10 (the global one)

應該儘可能的使用局部變量,有兩個好處:
1. 避免命名衝突
2. 訪問局部變量的速度比全局變量更快.
結構控制語句
控制結構的條件表達式結果可以是任何值,Lua認爲false和nil爲假,其他值爲真。
if語句,有三種形式:

if conditions then
    then-part
end;  --滿足條件就走then-part語句,不滿足跳出去
if conditions then
    then-part
else
    else-part
end;  --滿足條件走then-part語句,不滿足走else-part語句

if conditions then
    then-part
elseif conditions then
elseif-part
.. --->多個elseif
else
end    --具體滿足哪一個,就走對應的語句,如果都不滿足,就走else裏的語句

while語句

while condition do
    statements;
end;  --當滿足condition時,走statements

repeat-until語句:

repeat
    statements;
until conditions;

for循環:for循環分爲兩大類:數值for循環和泛型for循環
數值for循環

for var=exp1,exp2,exp3 do
    loop-part
end
--for將用exp3作爲step從exp1(初始值)到exp2(終止值),執行loop-part。其中exp3可以省略,默認step=1
for i=1,f(x) do  --第三個參數省略的默認值爲1,f(x)只會在循環前被調用一次
    print(i)
end
for i=10,1,-1 do  --開始值10,結束值1,每一次減1
    print(i)  打印出來是:10 9 8 7 6 5 4 3 2 1
end

控制變量var是局部變量自動被聲明,並且只在循環內有效.

for i=1,10 do
    print(i)
end
max = i -- 這裏的i應該是一個全局變量,如果i不存在,則會出錯
local found = nil
for i=1,a.n do
    if a[i] == value then
        found = i -- save value of 'i'
        break   --跳出循環
    end
end
print(found)

循環過程中不要改變控制變量的值,那樣做的結果是不可預知的。如果要退出循環,使用break語句
泛型for循環:

for i,v in ipairs(a) do print(v) end   --這個一般遍歷的是vector數據
for k in pairs(t) do print(k) end   --遍歷map

範型for和數值for有兩點相同:
1. 控制變量是局部變量
2. 不要修改控制變量的值
break和return語句
break語句用來退出當前循環(for,repeat,while)。在循環外部不可以使用。
return用來從函數返回結果,當一個函數自然結束結尾會有一個默認的return
Lua語法要求break和return只能出現在block的結尾一句(也就是說:作爲chunk的最後一句,或者在end之前,或者else前,或者until前),例如

local i = 1
while a[i] do
    if a[i] == v then break end
        i = i + 1
    end
end
發佈了46 篇原創文章 · 獲贊 13 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章