Lua 學習筆記(二) 語句

2021-09-20 02:45:18 字數 2688 閱讀 8217

lua 中的語句支援賦值,控制結構,函式呼叫,還有變數宣告。

不允許空的語句段,因此;;是非法的。

chunck ::=
([';']應該是表示語句組後面;是可選項。)

block ::= chunck

stat ::= do block end

可以將乙個語句塊顯式地寫成語句組,可以用於控制區域性變數的作用範圍。

lua 支援多重賦值。

多重賦值時,按序將右邊的表示式的值賦值給左值。右值不足補 nil,右值多餘捨棄。

b = 1

a,b = 4 -- a = 4,b = nil

lua 在進行賦值操作時,會一次性把右邊的表示式都計算出來後進行賦值。

i = 5

i,a[i] = i+1, 7 -- i = 6 ,a[5] = 7

特別地,有

x,y = y,x -- 交換 x,y 的值
對全域性變數以及表的域的賦值操作含義可以在元表中更改。

if [exp]

[block]

elseif [exp]

[block]

else

[block]

end

while [exp]

[block]

end

repeat

[block]

until [exp]

注意,由於repeat語句到until還未結束,因此在until之後的表示式中可以使用block中定義的區域性變數。

例如:

a = 1

c = 5

repeat

b = a + c

c = c * 2

until b > 20

print(c) --> 40

do break end
for迴圈的用法比較多,單獨拎出來講。

for中的表示式會在迴圈開始前一次性求值,在迴圈過程中不再更新。

for [name] = [exp],[exp],[exp] do [block] end
三個 exp 分別代表初值,結束值,步進。exp 的值均需要是乙個數字。

第三個 exp 預設為 1,可以省略。

a = 0

for i = 1,6,2 do

a = a + i

end

等價於

int a = 0;

for (int i = 1; i <= 6;i += 2)

迭代器形式輸出乙個表時,如果表中有函式,則輸出的順序及個數不確定(筆者測試得出的結果,具體原因未知)。

迭代器形式的 for 迴圈的實質

-- 依次返回 迭代器、狀態表、迭代器初始值

function mypairs(t)

function iterator(t,i)

i = i + 1

i = t[i] and i -- 如果 t[i] == nil 則 i = nil;否則 i = i

return i,t[i]

endreturn iterator,t,0

end-- 乙個表

t =

-- 迭代形式 for 語句的 等價形式

dolocal f, s, var = mypairs(t)

while true do

local var1, var2 = f(s, var)

var = var1

if var == nil then break end

-- for 迴圈中新增的語句

print(var1,var2)

endend-- 迭代形式 for 語句

for var1,var2 in mypairs(t) do

print(var1,var2)

end--> 1 1

--> 2 2

--> 1 1

--> 2 2

5.2.1 陣列形式
ary = 

for i,v in ipairs(ary) do

print(v) --> 1 2

end

從1開始,直到數值型下標結束或者值為 nil 時結束。

5.2.2 表遍歷

table = 

for k,v in pairs(table) do

print(v) --> 1 2 5

end

遍歷整個表的鍵值對。

參考鏈結

lua迭代器和泛型for(介紹 lua 迭代器的詳細原理以及使用)

lua筆記二 賦值語句

賦值是改變乙個變數的值和改變表域的最基本的方法。a hello world t.n t.n 1 lua可以對多個變數同時賦值,變數列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變數。a,b 10,2 x a 10 b 2 x 遇到賦值語句lua會先計算右邊所有的值然後再執行賦值操...

Lua 學習筆記(五) 語句

一 賦值 多重賦值 每個值或每個變數之間以逗號分隔 例如 a,b 10,20 lua先對等號右邊的所有元素求值,然後才執行賦值。二 區域性變數和塊 local建立區域性變數,作用域僅限於宣告它們的程式塊。三 控制結構 1.if then else end 例如 2.for 數值型for for va...

Lua 學習筆記(二)

這一章我們介紹一下lua中函式的宣告,其實函式這東西我們每個人都接觸過,就像我們初中高中學的一次函式 二次函式是一樣的。舉個簡單的例子吧,目前歐元匯率和人民幣匯率的比例是1歐元換7.2人民幣,那我們手裡有100歐元能換多少人民幣呢?如果是1000歐元呢?遇到這種問題的時候,我們就需要找到乙個規律,然...