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

上一篇: Lua決策結構 下一篇: Lua字串