函數(shù)用于將一組語(yǔ)句組合起來(lái)完成一個(gè)任務(wù)。你可以將你的代碼分割到不同的函數(shù)中。如何將你的代碼分到不同的函數(shù)中完全由你自己決定,不過(guò)一般會(huì)按照邏輯功能進(jìn)行劃分,每個(gè)函數(shù)都執(zhí)行一個(gè)特定的任務(wù)。
在 Lua 中提供了大量的內(nèi)置函數(shù)供我們使用。例如,print() 函數(shù)用于將輸入的參數(shù)輸出到終端。
函數(shù)往往也被稱(chēng)作方法,子例程或過(guò)程等等。
Lua 中函數(shù)定義的語(yǔ)法如下所示:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
Lua 中函數(shù)定義包括函數(shù)頭和函數(shù)名兩部分。如下列出函數(shù)的所有部分:
下面是函數(shù) max() 源代碼。此函數(shù)接受兩個(gè)參數(shù) num1 與 num2,返回兩個(gè)輸入?yún)?shù)的最大值。
--[[ function returning the max between two numbers --]]
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
如果函數(shù)需要用到參數(shù),則它必須聲明接受參數(shù)值的變量。這些被聲明的變量被稱(chēng)為函數(shù)的形式參數(shù)或簡(jiǎn)稱(chēng)形參。
函數(shù)的形參與函數(shù)中其它局部變量一樣,在函數(shù)的入口處被創(chuàng)建,函數(shù)結(jié)束時(shí)被銷(xiāo)毀。
創(chuàng)建函數(shù)的時(shí)候,我們已經(jīng)定義了函數(shù)做什么。接下來(lái),我們就可以調(diào)用函數(shù)來(lái)完成已定義的任務(wù)或功能。
當(dāng)程序中調(diào)用一個(gè)函數(shù)時(shí),程序的控制轉(zhuǎn)移到被調(diào)用的函數(shù)中。被調(diào)用的函數(shù)執(zhí)行定義的任務(wù);當(dāng) return 語(yǔ)句被執(zhí)行或者到達(dá)函數(shù)末尾時(shí),程序的控制回到主程序中。
調(diào)用函數(shù)的方法很簡(jiǎn)單,你只需要將函數(shù)要求的參數(shù)傳遞給函數(shù)就可以實(shí)現(xiàn)函數(shù)的調(diào)用。如果函數(shù)有返回值,你也可以將函數(shù)的返回值存儲(chǔ)下來(lái)。如下如示:
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- 調(diào)用函數(shù)
print("The maximum of the two numbers is ",max(10,4))
print("The maximum of the two numbers is ",max(5,6))
執(zhí)行上面的代碼,可以得到如下的輸出結(jié)果:
The maximum of the two numbers is 10
The maximum of the two numbers is 6
在 Lua 語(yǔ)言中,我們可以將函數(shù)賦值給一個(gè)變量,也可以將函數(shù)作為參數(shù)傳遞給另外一個(gè)函數(shù)。下面是賦值傳遞函數(shù)的一個(gè)例子:
myprint = function(param)
print("This is my print function - ##",param,"##")
end
function add(num1,num2,functionPrint)
result = num1 + num2
functionPrint(result)
end
myprint(10)
add(2,5,myprint)
執(zhí)行上面的代碼,可以得到如下的輸出結(jié)果:
This is my print function - ## 10 ##
This is my print function - ## 7 ##
在 Lua 語(yǔ)言中,使用 ... 作為參數(shù)可以創(chuàng)建參數(shù)個(gè)數(shù)可變的函數(shù),即變參函數(shù)。我們可以使用下面的這個(gè)例子來(lái)理解變參函數(shù)的概念。下面的這個(gè)例子中函數(shù)返回輸入?yún)?shù)的平均值:
function average(...)
result = 0
local arg={...}
for i,v in ipairs(arg) do
result = result + v
end
return result/#arg
end
print("The average is",average(10,5,3,4,5,6))
執(zhí)行上面的代碼,可以得到如下的輸出結(jié)果:
The average is 5.5