1. 程式人生 > 實用技巧 >Lua:變數、迴圈語句、條件語句、函式

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
end
a,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)