Lua函數

函數是一組一起執行任務的語句。可以把代碼放到獨立的函數中。怎麼劃分代碼功能之間的不同,但在邏輯上劃分通常是讓每個函數執行特定的任務。

Lua語言提供了程序可以調用大量的內置方法。例如,方法print()打印作爲輸入傳參數在控制檯中。

函數是已知的各種名稱,如方法或子程序或程序等。

定義一個函數

在Lua編程語言中的方法的定義一般形式如下:

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end

在 Lua 編程語言的方法定義包括方法頭和方法體。這裏是方法的所有部件

  • 可選函數適用範圍:可以使用關鍵字本地範圍的限制功能或忽略的範圍部分,這將使它成爲一個全局函數。

  • 函數名稱:這是函數的實際名稱。函數名和參數列表一起構成了函數簽名。

  • 參數:一個參數是像佔位符。當調用一個函數,將值傳遞給參數。這個值被稱爲實際參數或參數。參數列表是指類型,順序和數量的方法的參數。參數是可選的;也就是說,方法可能沒有參數。

  • 函數體:方法主體包含了定義方法做什麼的語句的集合。

  • 返回:在Lua中可以通過下面的逗號分隔的返回值,return關鍵字返回多個值。

例子:

下面是一個函數的源代碼調用max()。這個函數有兩個參數num1與num2並返回兩者之間的最大值:

--[[ function returning the max between two numbers --]]
function max(num1, num2)

if (num1 > num2) then
result = num1;
else
result = num2;
end

return result;
end

函數參數:

如果一個函數使用參數,它必須聲明接受的參數值變量。這些變量被函數的形式參數調用。

正式的參數表現得就像在函數內部其他本地變量和在進入函數創建並在退出時銷燬。

調用函數:

當創建一個Lua函數,給什麼樣的功能,必須做一個定義。要使用一個方法,將不得不調用該函數來執行定義的任務。

當程序調用一個函數,程序的控制轉移到被調用的函數。被調用函數進行定義的任務和在執行它的return語句或當其功能的終端到達時,程序控制返回到主程序。

而調用只是需要傳遞所需的參數以及方法名的方法,如果方法返回一個值,那麼你可以存儲返回的值。例如:

function max(num1, num2)

if (num1 > num2) then
result = num1;
else
result = num2;
end

return result;
end

-- calling a function
print("The maximum of the two numbers is ",max(10,4))
print("The maximum of the two numbers is ",max(5,6))

當我們運行上面的代碼中,將得到下面的輸出。

The maximum of the two numbers is 10
The maximum of the two numbers is 6

分配和傳遞函數

在Lua中,我們可以指定函數的變量,也可以將它們作爲另一個函數的參數。下面是一個簡單的例子,用來分配Lua傳遞一個函數作爲參數。

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)

當我們運行上面的代碼中,將得到下面的輸出。

This is my print function - ## 10 ##
This is my print function - ## 7 ##

函數與變量參數

可以在Lua中創建一個具有可變參數的函數......作爲它的參數。我們可以通過看一個例子,利用可變參數該函數將返回平均值。

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))

當我們運行上面的代碼中,將得到下面的輸出。

The average is 5.5