lua 使用function定義函數,語法以下:html
function fun_name(args) --args表示參數列表,函數的參數列表能夠爲空 --body end
上面方法定義了一個全局函數,爲了避免污染命名空間,同時減小性能損耗,應該儘可能使用局部函數,方法以下(只要在function前面加local 聲明便可)函數
local function fun_name(args) --args表示參數列表,函數的參數列表能夠爲空 --body end
函數傳參幾個規則
1. 若參數個數大於形參個數,從左向右,多餘的實參被忽略
2. 若參數個數小於形參個數,從左向右,沒有被初始化的形參被初始化爲nil
3. lua支持變長參數。用...表示,在參數列表後面。一個可變長參數不會有一個對應參數列表。他會收集全部的參數放進一個變參表達式裏(...)。這個表達式的值表示全部參數值。它與函數多返回值的那種狀況是類似的。若是一個變參表達式在是其餘表達式內部或在一些表達式的中間,他只返回是一個元素,例如: local cc,dd,ee = a,...,34。 若是這個表達式是在表達式列表的最後一個,他不會對參數進行調和除非用一個括號。性能
例若有以下三個函數lua
function f(a,b) end function g(a,b,...) end function r() return 1,2,3 end
傳入的參數與參數映射以下code
CALL PARAMETERS f(3) a=4,b=nil --沒有爲b傳值則b爲nil f(4,5) a=4,b=5 --參數一一對應 f(3,4,5) a=3,b=4 --多餘參數無做用 f(r(),10) a=1,b=10 --可變參數在中間,表達式的值則是第一個變參列表元素 f(r()) a=1,b=2 -- 可變參數在最後不受影響 g(3) a=3,b=nil, ... -->(nothing) --b參數和...參數都沒有傳參數則爲nil g(3,4) a=3,b=4, ... -->(nothing) --沒有爲可變參數傳參則爲nil g(3,4,5,6) a=3,b=4, ... -->5 6 --可變參數爲最後一個,則自動收集參數列表到可變參數 g(5,r()) a=5,b=1, ... -->2,3 --第二個參數b傳的是一個可變參,則b爲可變參數的第一個元素。第三個參數是個可變參,它取可變參的剩餘參數
以下定義一個max函數,參數爲n1,n2,用於比較兩數值的大小htm
function max(num1,num2) if (num1>num2) then result = num1 else result = num2 end return result end print("兩值比較最大值爲",max(10,10))
LUA可變長參數 ... 三個點blog