【Lua學習筆記】2:變數,多變數賦值,table索引,各類迴圈
阿新 • • 發佈:2019-02-08
變數
Lua中變數分為全域性變數、區域性變數、table
中的域。如果不用local
顯式宣告,即使是在函式內部的變數,仍然是全域性變數。如:
function myfun()
a=1 --全域性變數
print("a="..a.."建立了!")
end
myfun() --不過函式中的變數顯然要呼叫過這個函式才會建立
local b=2 --區域性變數
c={"啊","嗯嗯"}
c[2]="呵呵" --table域
print("a="..a..",b="..b..",c[2]="..c[2])
輸出:
a=1建立了!
a=1,b=2,c[2]=呵呵
多變數賦值
Lua支援多變數賦值,支援賦值號左右數目不一致(以左側為準)。如:
a=1;
b=2;
c=3;
--輪換a,b,c的值
a,b,c=b,c,a;
print(a.." "..b.." "..c);
--這樣會編譯錯誤
--[[
a,b,c=1,2;
print(a.." "..b.." "..c);
]]--
--5,6都被忽略
a,b=3,4,5,6;
print(a.." "..b.." "..c);
輸出:
2 3 1
3 4 1
Lua中可以省略語句結尾的分號,就像之前那樣。大部分時候肯定是喜歡簡潔的形式,有的地方又為了結構清晰嚴謹需要打上分號,可以混著來用。
table索引
對table
的索引(table變數[key名]
)實際是在呼叫一個底層的函式來獲取索引值。當key是string
型別時,獲取還可以寫成table變數.key名
的形式。如:
lzh={}
lzh["age"]=21
print(lzh["age"])
print(lzh.age) --不用帶引號
輸出:
21
21
各類迴圈
while迴圈
格式:
while(condition)
do
statements
end
標準for迴圈
格式:
--三個表示式只在for啟動前求值一次
for 變數=初始值(表示式),退出值(表示式),步長(表示式,省略則為1 ) do
statements
end
如:
function myfun()
return 3
end
--在啟動前求值得myfun()-1為2
for i=5,myfun()-1,-1 do
print(i)
end
輸出:
5
4
3
2
迭代器for迴圈
上篇中使用過了pairs()
函式來得到一個table
變數的迭代器,除此之外還可以使用ipairs()
函式來遍歷,兩者有些不同,網上找到了一種解讀:
pairs可以遍歷表中所有的key,並且除了迭代器本身以及遍歷表本身還可以返回nil。
ipairs不能返回nil,只能返回數字0,如果遇到nil則退出。它只能遍歷到表中出現的第一個不是整數的key。
如:
a={"第一個","第二個"}
a["three"]="第三個"
a[4]="第四個"
--pairs
for k,v in pairs(a) do
print(k..":"..v)
end
print()
--ipairs
for k,v in ipairs(a) do
print(k..":"..v)
end
輸出:
1:第一個
2:第二個
4:第四個
three:第三個
1:第一個
2:第二個
repeat-until迴圈
格式:
repeat
statements
until(condition)
很多程式語言都沒有在語法層面實現這種迴圈,它完全可以被其它迴圈代替掉。但有時候用它可以讓邏輯上更清楚。