Lua學習筆記 函式

2022-06-16 19:45:16 字數 1350 閱讀 6809

1.函式宣告語法:

function func_name (arguments-list)

statements-list;

end;

首先說明一點,lua中函式是第一類值,和其他的型別(table,number,boolean等)一樣,所以可以作為函式的引數,table的鍵和值。

2.函式呼叫

直接使用函式名稱呼叫,引數按照形參表裡面依次匹配,如果實參多於形參,則多餘實參被丟棄;如果實參少於形參,那麼剩下的形參會被賦值為nil。

function

f(a, b)

return

a, b

endcall parameters

f(3) a=3, b=nil

f(3, 4) a=3, b=4

f(3, 4, 5) a=3, b=4 (5 is discarded)

另外函式呼叫時如果引數為字串或者表構造時,可以不寫括號,用法如下。吐槽一下,這點設計看似方便,實則是閱讀**的災難。實際上多打一對括號並不會花很多力氣,但是**的閱讀性看起來就好很多了。

function

func(string)

print

(string)

endfunc

"123

"func

輸出結果

123table: 008db3b0

3. 多返回值

這點較為簡單,需要注意的是如果呼叫的時候在函式加乙個括號,只會返回第乙個值。

function

f(a, b)

return

a,bend

print(f(1,2

))print((f(1,2

)))輸出結果12

1

4. 可變引數

lua 函式可以接受可變數目的引數,和 c 語言類似在函式引數列表中使用三點(...)表示函式有可變的引數。lua 將函式的引數放在乙個叫 arg 的表中,除了引數以外,arg表中還有乙個域 n 表示引數的個數。

function

g (a, b, ...)

endcall parameters

g(3) a=3, b=nil, arg=

g(3, 4) a=3, b=4, arg=

g(3,4,5,6) a=3, b=4, arg=

5. 命名引數

命名引數使用表傳遞引數,這個有點雞肋,因為如果沒有函式的說明,根本不知道引數是什麼,而且函式對於引數的依賴度過高,必須進行引數判斷。

6. 閉包

這個具體應用還不太清楚,之後補充。

Lua學習筆記函式

數字型for 的格式,exp3預設為1 for var exp1 exp2 exp3 do 執行體 end泛型for迭代的型別,標準庫中提供了幾種迭代器 io.lines 用於迭代檔案中每行 pairs 迭代table中元素 ipairs 迭代 陣列 元素 string.gmatch 迭代字串中單詞...

Lua學習筆記3 函式

函式定義形如 function 函式名 引數列表 函式體end 例如 function add a,b return a b end相當於 add function a,b return a b end 和c語言一樣,lua的函式可以接受可變引數個數,它同樣是用 來定義的,比如 function s...

Lua學習筆記(二) 函式

1 可以在字串前放置操作符 來獲得該字串的長度 for i 1,arr do print arr i end注 上面的程式中 arr的意思就是arr的長度。注 lua 中的變數,如果沒有 local 關鍵字,全都是全域性變數,lua也是用 table 來管理全域性變數的,lua把這些全域性變數放在了...