定義函數
--獲取較大值
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("#",...)來獲取可變參數的數量
有時候我們可能需要幾個固定參數加上可變參數,固定參數必須在可變參數之前。