Lua:變數、迴圈語句、條件語句、函式
一、變數
1、變數作用域
- 與C#不同,Lua中的變數全是全域性變數,無論是在語句塊或是函式裡。
- local顯式宣告為區域性變數。區域性變數的作用域為從宣告位置開始到所在語句塊結束。
- 可以通過do end來進行語句塊的控制,實現劃分作用域,類似C#中的{}。
如:
function Test() do local b=3 print(b) end print(b) end Test() print(b)
2、變數的賦值
- 使用=
- 允許使用“,”進行分割進行多個賦值,沒用賦值的預設為nil。
如:
function test() return 40,50 enda,b,c = test() d = test() print(a,b,c,d)
Tips: a,b = b,a 實現快速交換a、b變數的值。
二、迴圈
常用迴圈有while迴圈、for迴圈、repeat unitl迴圈(類似C#中的do while)。
迴圈可以互相巢狀,但需要注意塊之間的作用域。
1、while迴圈
語法:
while (未完成條件) do
迴圈體
end
如:
1 a = 1 2 while (a<=20) do 3 if (a%2==1) then 4 print(a) 5 end 6 a=a+1 7 end
2、for迴圈
分為兩種數值for迴圈和泛型for迴圈
(1)數值for迴圈
格式:
for var=初始值,結束值,遞增值 do
迴圈體
end
這裡var會從start變化到end,每次變化一step進行
如:
1 for i=1,10,2 do 2 print(i) 3 end
1 for i=20,1,-3 do 2 print(i) 3 end
(2)泛型for迴圈
pairs:能迭代所有鍵值對。
ipairs:可以想象成int+pairs,只會迭代鍵為數字的鍵值對。
格式:
for 索引,值 in pairs() do
print(索引,值)
end
如:
1 tab2 = {"apple","橡膠","西瓜","獼猴桃"} 2 3 for k,v in pairs(tab2) do 4 print(k,v) 5 end
3、repeat unitl迴圈(C#中的do while)
格式:
repeat
迴圈體
until(完成條件)
如:
1 repeat 2 print(a) 3 a=a+1 4 until(a>10)
迴圈控制語句
1、break 停止最內層迴圈的執行,並開始執行的外層的迴圈語句。
2、 goto 將控制流程無條件地轉到被標記的語句
格式:
goto 標籤
:: 標籤 ::
Tips:continue 可以用 goto。
如:
1 for i=1, 3 do 2 if i <= 2 then 3 print(i, "yes continue") 4 goto continue 5 end 6 print(i, " no continue") 7 ::continue:: 8 print([[i'm end]]) 9 end
三、條件語句
if和elseif 語句的布林表示式後面都需要跟then。
1、if語句
格式:
if (布林表示式) then
--true
end
2、if else語句
格式:
if(布林表示式)then
--true
else
--false
end
3、if...elseif...else語句
格式:
if (布林表示式) then
--1
elseif (布林表示式) then
--2
else
- -3
end
四、function函式
格式:
[local] function 函式名(arg1,arg2,arg3.....argn)
函式體
[return value1,value2.....valuen]
end
1、函式可以作為資料賦值,可以作為引數傳遞。
2、lua裡面的函式可以返回多個值。
3、可變引數在函式引數列表中使用三點 ... 表示函式有可變的引數。
如:
1 function average(...) 2 --print(arg[1]) 3 local arg = {...} 4 res = 0 5 for k,v in pairs(arg) do 6 res = res+v 7 --print(res.."for") 8 end 9 -- #arg 取得引數的個數 #"hello" 10 print(res/#arg) 11 end 12 13 average() 14 average(10) 15 average(1,30) 16 average(3,8,90) 17 average(5,67,7,8,3)