鍍金池/ 教程/ Java/ 函數(shù)
數(shù)據(jù)庫(kù)訪問(wèn)
循環(huán)
數(shù)組
錯(cuò)誤處理
面向?qū)ο?/span>
調(diào)試
游戲開(kāi)發(fā)
文件 I/O
變量
迭代器
Web 編程
模塊
函數(shù)
元表
協(xié)程
垃圾回收機(jī)制
標(biāo)準(zhǔn)庫(kù)
決策
數(shù)據(jù)類(lèi)型
運(yùn)行環(huán)境
操作符
字符串
基本語(yǔ)法
概述

函數(shù)

函數(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ò)程等等。

函數(shù)定義

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ù)作用域:你可以使用關(guān)鍵字 local 限制函數(shù)的作用域,你也可以忽略此部分而使用默認(rèn)值。函數(shù)作用域默認(rèn)是全局。
  • 函數(shù)名:函數(shù)的真正名稱(chēng)。函數(shù)名與函數(shù)的參數(shù)列表一起被稱(chēng)為函數(shù)簽名。
  • 參數(shù):一個(gè)參數(shù)就一個(gè)占位符一樣。函數(shù)調(diào)用時(shí),把值傳遞給參數(shù)。這個(gè)值被稱(chēng)之為實(shí)際參數(shù)或直參數(shù)。參數(shù)列表指參數(shù)的類(lèi)型,順序與數(shù)量。參數(shù)是可選的,一個(gè)函數(shù)可以沒(méi)有參數(shù)。
  • 函數(shù)體:函數(shù)體是代碼語(yǔ)句集合,定義了函數(shù)的功能。
  • 返回:在 Lua 中,可以使用 return 關(guān)鍵字同時(shí)返回多返回值,每個(gè)返回值之間使用逗號(hào)分隔。

示例

下面是函數(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ù)需要用到參數(shù),則它必須聲明接受參數(shù)值的變量。這些被聲明的變量被稱(chēng)為函數(shù)的形式參數(shù)或簡(jiǎn)稱(chēng)形參。

函數(shù)的形參與函數(shù)中其它局部變量一樣,在函數(shù)的入口處被創(chuàng)建,函數(shù)結(jié)束時(shí)被銷(xiāo)毀。

調(diào)用函數(shù)

創(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

賦值與傳遞函數(shù)

在 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   ##

變參函數(shù)

在 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
上一篇:決策下一篇:協(xié)程