1.函數定義的格式:
Lua使用function定義函數,語法如下:
function function_name (arc) --arc表示參數列表,函數的參數列表可以為空
--body
end
上面的語法等價於:
function_name function_name (arc)
--body
end_
上面的方法都是定義了一個全局函數,為了不污染命名空間,同時減少性能損耗,我們應該盡量使用“局部函數”,方法如下(只需要再前面加local聲明即可):
local function function_name (arc) --arc表示參數列表,函數的參數列表可以為空
--body
end
注意:Lua函數的本質是變量賦值,所以再使用函數之前,一定要先定義函數(C語言可以再后面定義,前面聲明,但是Lua沒有聲明,只有定義)
由於函數定義等價於變量賦值,也就可以把函數名替換為Lua某個表的字段,如:
function Foo.bar(a, b, c) --此時不能再加local函數聲明了 end
2.函數參數
1)Lua函數的參數大部分是按值傳遞的。
函數傳參的幾個規則:
a、若參數個數大於形參個數,從左向右,多余的實參被忽略
b、若實參個數小於形參個數,從左向右,沒有被初始化的形參被初始化為nil
c、Lua還支持變長參數。用...表示。此時訪問參數也要用...,如:
local function func(...) --形參為 ... ,表示函數采用變長參數 local temp = {...} --訪問的時候也要使用 ... local ans = table.concat(temp, "") --使用table.concat庫函數,對數組內容使用" "拼接成字符串。 print(ans) end func(1, 2) --傳遞了兩個參數 func(1, 2, 3, 4) --傳遞了四個參數 -->output 1 2 1 2 3 4
2)當函數參數是table類型時,傳遞進來的實際上是實際參數的引用。如具名函數
3.函數的返回值
Lua函數允許返回多個值,返回多個值時,中間用逗號隔開
函數返回值的規則:
1)若返回值個數大於接收變量的個數,多余的返回值會被忽略掉;
2)若返回值個數小於參數個數,從左向右,沒有被返回值初始化的變量會被初始化為nil
函數返回值與表達式:
1)當一個函數返回一個以上的返回值,且函數調用不是一個列表表達式的最后一個元素,那么函數只返回第一個返回值,如:
local function init() --init函數返回兩個值 1和"lua" return 1, "lua" end local x, y, z = init(), 2 --init函數的位置不在最后,此時只返回 1 print(x, y, z) -->output 1 2 nil local a, b, c = 2, init() --init函數的位置在最后,此時返回 1 和 "lua" print(a, b, c) -->output 2 1 lua
2)如果你確保只取函數返回值的第一個值,可以使用括號運算符,例如:
local function init() return 1, "lua" end print((init()), 2) -->output 1 2 print(2, (init())) -->output 2 1