標籤:lua
Lua學習筆記之基本文法
1、 賦值語句
賦值是改變一個變數的值和改變表域的最基本的方法。
a = “hello”..”world”
t.n = t.n+1
lua可以對多個變數同時賦值,變數列表和值列表的各個元素用逗號分開,賦值語句右邊的值會一次賦給左邊的變數。
a,b = 10,2*x <-->a = 10;b = 2*x
遇到賦值語句lua會先計算右邊所有的值然後再執行賦值操縱,所以我們可以這樣進行交換變數的值:
x,y = y,x --swap ’x’for ‘y’
a[i],a[j] =a[j],a[i] --swap ‘a[i]’ for ‘a[j]’
當變數個數和值個數不一致時,lua會一直以變數個數為基礎採用以下策略:
a.變數個數>值個數 按變數個數補足nil
b.變數個數<值個數 多餘的值會被忽略
例如:
a,b,c = 0,1
print(a,b,c) -->0 1 nil
a,b=a+1,b+1,b+2 -->value of b+2 is ignored
print(a,b) -->1 2
a,b,c = 0
print(a,b,c) -->0 nil nil
如果要對多個變數賦值必須一次對每一個變數賦值。
a,b,c = 0,0,0
print(a,b,c) -->0 0 0
多值賦值常用來交換變數,或者函數調用返回給變數:
a,b = f()
f()返回兩個值,第一個賦給a,第二個賦給b
2、 局部變數與代碼塊(block)
使用local建立一個局部變數,與全域變數不同,局部變數只在被聲明的那個代碼塊內有效。代碼塊:指一個控制結構體內,一個函數體,或者一個chunk(變數被聲明的那個檔案或者文本串)
x = 10
local i = 1
while i<=x do
local x = i*2
print(x)
i = i+1
end
if i>20 then
local x
x = 20
print(x+20)
else
print(x)
end
print(x)
使用局部變數的好處:
① 免命名衝突
② 訪問局部變數的速度比全域變數更快
3、 控制結構
控制結構的運算式結果可以是任何值,lua認為false和nil為假,其他都是真。
if語句,有三種形式:
if conditions then
then – part
end
if conditions then
then-part
else
else – part
end
if conditions then
then – part
else if conditionsthen
else if –part
.. -->多個else if
else
else – part
end
while語句:
while conditions do
statements
end
repaeat_until語句:
repeat
statements
untitl conditions
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
print(i)
end
for i = 10,1,-1 do
print(i)
end
上面的第一個例子f(x)只會在迴圈前被調用一次。
控制變數var 是局部變數自動被聲明,並且只在迴圈內有效。
for i=1,10 do
prin(i)
end
如果需要保留控制變數的值,需要在迴圈中將其儲存
Local found = nil
for i =1,a.n do
if a[i] == value then
found = i
break
end
end
print(found)
迴圈過程中不要改變控制變數的值,那樣做會是結果不可預知,如果要退出迴圈使用break語句。
範型for迴圈:
for i,v in ipairs(a) do print(v) end
範型for遍曆迭代子函數返回的每一個值。
for k in paris(t) do print(k) end
範型for和數值for有兩點相同:
① 制變數是局部變數
② 不要修改控制變數的值
4、 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 thenbreak end
i = i+1
end
有時候為了調試或者其他目的需要在block的中間使用return或者break,可以顯示的使用do..end來實現:
function foo ()
return
do return end
…
end
lua學習筆記之基本文法