Lua基礎教程之函數

定義函數

--獲取較大值
function Max(a,b)
    return (a > b) and a or b
end

  lua中還可以將函數作爲參數傳遞給函數

myprint = function(param)
   print("這是打印函數 -   ##",param,"##")
end

function add(num1,num2,functionPrint)
   result = num1 + num2
   -- 調用傳遞的函數參數
   functionPrint(result)
end
myprint(10)
-- myprint 函數作爲參數傳遞
add(2,5,myprint)

輸出
這是打印函數 - ## 10 ##
這是打印函數 - ## 7 ##

 多重返回值

  lua中允許函數返回多個結果。

  例如,string中返回匹配字符串的索引起始和結尾索引.

startindex,endindex = string.find("hello lua users","lua")
print(s,e)
輸出 7 9

  查找數組中最大元素,並返回該元素的位置

do
    local array = {1,2,3,10,5}
    function max(arr)
        local index =1
        local max = arr[index]
        for i,val in ipairs(arr) do
            if val > max then
                max = val
                index = i
            end
         end
        return index,max
    end
    local index,number = max(array)
    print(index,number)
end

  lua會調整一個函數的返回值以適應不同的調用情況

function foo0() end
function foo1() return "a" end
function f002() return "a","b" end

多重賦值
x,y = foo1()  --> x="a" b = nil
x,y,z = 10,foo2() --> x=10,y="a",z="b"
如果函數調用的不是一系列表達式的最後一個元素,那麼將只產生一個值
x,y = foo2(),20 --> x="a",y = 20
x,y = foo2(),20,40 --> x="a",y=20
當一個函數調用作爲另一個函數調用的而最後一個實參時,第一個函數的所有返回值都
將作爲實參傳入第二個函數
print(foo2()) --> "a" "b"
print(foo2().."x") --> ax --當foo2出現在一個表達式中時,lua會將其返回值數量
調整爲1

   unpack

  接受一個數組爲參數,並從下標1開始返回數組的所有元素(類似以es6中的解構賦值)

print(unpack({10,20,30})) --> 10  20  30
a,b = unpack({10,20,30}}) --> a = 10 b = 20

變長參數

   lua中函數還可以接受不同數量的實參

function sum(...)
    local sum = 0
    for i,v in ipairs{...} do --注意這裏是大括號
    sum = sum +v
    end
    return sum
end
print(sum(1,2,3,5,6)) -->  17

        獲取參數數量   

  使用select("#",...)來獲取可變參數的數量

  有時候我們可能需要幾個固定參數加上可變參數,固定參數必須在可變參數之前。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章