函數(shù)用于將一組語句組合起來完成一個任務(wù)。你可以將你的代碼分割到不同的函數(shù)中。如何將你的代碼分到不同的函數(shù)中完全由你自己決定,不過一般會按照邏輯功能進行劃分,每個函數(shù)都執(zhí)行一個特定的任務(wù)。
在 Lua 中提供了大量的內(nèi)置函數(shù)供我們使用。例如,print() 函數(shù)用于將輸入的參數(shù)輸出到終端。
函數(shù)往往也被稱作方法,子例程或過程等等。
Lua 中函數(shù)定義的語法如下所示:
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ù)接受兩個參數(shù) num1 與 num2,返回兩個輸入?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ù)值的變量。這些被聲明的變量被稱為函數(shù)的形式參數(shù)或簡稱形參。
函數(shù)的形參與函數(shù)中其它局部變量一樣,在函數(shù)的入口處被創(chuàng)建,函數(shù)結(jié)束時被銷毀。
創(chuàng)建函數(shù)的時候,我們已經(jīng)定義了函數(shù)做什么。接下來,我們就可以調(diào)用函數(shù)來完成已定義的任務(wù)或功能。
當程序中調(diào)用一個函數(shù)時,程序的控制轉(zhuǎn)移到被調(diào)用的函數(shù)中。被調(diào)用的函數(shù)執(zhí)行定義的任務(wù);當 return 語句被執(zhí)行或者到達函數(shù)末尾時,程序的控制回到主程序中。
調(diào)用函數(shù)的方法很簡單,你只需要將函數(shù)要求的參數(shù)傳遞給函數(shù)就可以實現(xiàn)函數(shù)的調(diào)用。如果函數(shù)有返回值,你也可以將函數(shù)的返回值存儲下來。如下如示:
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 語言中,我們可以將函數(shù)賦值給一個變量,也可以將函數(shù)作為參數(shù)傳遞給另外一個函數(shù)。下面是賦值傳遞函數(shù)的一個例子:
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 語言中,使用 ... 作為參數(shù)可以創(chuàng)建參數(shù)個數(shù)可變的函數(shù),即變參函數(shù)。我們可以使用下面的這個例子來理解變參函數(shù)的概念。下面的這個例子中函數(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