Lua函式


函式是一組一起執行任務的語句。可以將程式碼劃分組合為單獨的函式。如何在不同的函式之間劃分程式碼取決於開發者,但邏輯上這個劃分通常是唯一的,所以每個函式都執行一個特定的任務。

Lua語言提供了許多程式可以呼叫的內建方法。 例如,print()方法列印在控制台中作為輸入傳遞的引數。

函式也有類似的其它叫法,例如:方法或子例程或過程等。

定義函式

Lua程式設計語言中方法定義的一般形式如下 -

optional_function_scope function function_name( argument1, argument2, argument3........, 
argumentn)

function_body

return result_params_comma_separated
end

Lua程式設計語言中的方法定義由方法頭和方法體組成。以下是方法的所有部分 -

  • 可選函式範圍 - 使用關鍵字local來限制函式的範圍,或者忽略scope部分,這會變成一個全域性函式。
  • 函式名稱 - 這是函式的實際名稱。 函式名稱和引數列表一起構成函式簽名。
  • 引數 - 引數就像一個預留位置。 呼叫函式時,將值傳遞給引數。 該值稱為實際引數或引數。 引數列表指的是方法的引數的型別,順序和數量。 引數是可選的; 也就是說,方法的引數可有可無。
  • 函式主體 - 方法體包含一組語句,用於定義方法的作用。
  • 返回 - 在Lua中,可通過使用return關鍵字,後加逗號分隔返回值列表來返回多個值。

範例

以下是max()函式的原始碼。 此函式接受兩個引數num1num2,並返回兩者的最大值 -

--[[ 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函式時,可以定義函式必須執行的操作。 要使用方法,可通過呼叫函式來執行定義的任務。

當程式呼叫一個函式時,程式控制會轉移到呼叫的函式。呼叫的函式執行定義的任務,當執行其返回語句或達到其函式結束時,它將程式控制返回給主程式。

要呼叫函式,只需傳遞必需的引數和函式名稱,如果函式有返回值,則可以儲存返回的值。 例如 -

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