lua函數

1. 函數定義

lua 使用function定義函數,語法以下:html

function  fun_name(args)  --args表示參數列表,函數的參數列表能夠爲空
    --body
end

上面方法定義了一個全局函數,爲了避免污染命名空間,同時減小性能損耗,應該儘可能使用局部函數,方法以下(只要在function前面加local 聲明便可)函數

local function  fun_name(args)  --args表示參數列表,函數的參數列表能夠爲空
    --body
end

2. 函數參數

函數傳參幾個規則
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爲可變參數的第一個元素。第三個參數是個可變參,它取可變參的剩餘參數

3. 函數範例

以下定義一個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

相關文章
相關標籤/搜索