Lua學習---函數定義


1.函數定義的格式:

Lua使用function定義函數,語法如下:

  function function_name (arc)    --arc表示參數列表,函數的參數列表可以為空

    --body

  end

上面的語法等價於:

  function_name function_name (arc)

    --body

  end_

上面的方法都是定義了一個全局函數,為了不污染命名空間,同時減少性能損耗,我們應該盡量使用“局部函數”,方法如下(只需要再前面加local聲明即可):

  local function function_name (arc)    --arc表示參數列表,函數的參數列表可以為空

    --body

  end

注意:Lua函數的本質是變量賦值,所以再使用函數之前,一定要先定義函數(C語言可以再后面定義,前面聲明,但是Lua沒有聲明,只有定義)

  由於函數定義等價於變量賦值,也就可以把函數名替換為Lua某個表的字段,如:

function Foo.bar(a, b,	c)  --此時不能再加local函數聲明了
end

 2.函數參數

1)Lua函數的參數大部分是按值傳遞的。

函數傳參的幾個規則:

  a、若參數個數大於形參個數,從左向右,多余的實參被忽略

  b、若實參個數小於形參個數,從左向右,沒有被初始化的形參被初始化為nil

  c、Lua還支持變長參數。用...表示。此時訪問參數也要用...,如:

local function	func(...)	--形參為	...	,表示函數采用變長參數
  local temp	= {...}	 --訪問的時候也要使用	...
  local ans	= table.concat(temp,	"") --使用table.concat庫函數,對數組內容使用"	"拼接成字符串。
			print(ans)
end
func(1,	2) --傳遞了兩個參數
func(1,	2, 3, 4) --傳遞了四個參數
-->output
1 2
1 2 3	4

2)當函數參數是table類型時,傳遞進來的實際上是實際參數的引用。如具名函數

3.函數的返回值

Lua函數允許返回多個值,返回多個值時,中間用逗號隔開

函數返回值的規則:

  1)若返回值個數大於接收變量的個數,多余的返回值會被忽略掉;

  2)若返回值個數小於參數個數,從左向右,沒有被返回值初始化的變量會被初始化為nil

 

函數返回值與表達式:

  1)當一個函數返回一個以上的返回值,且函數調用不是一個列表表達式的最后一個元素,那么函數只返回第一個返回值,如:

  

local function init()	--init函數返回兩個值 1和"lua"
  return 1, "lua"
end
local	x, y,	z = init(), 2 --init函數的位置不在最后,此時只返回	1
print(x, y, z)			-->output 1 2 nil
local	a, b, c = 2,	init()		--init函數的位置在最后,此時返回 1 和 "lua"
print(a, b, c)			-->output 2 1	lua

  2)如果你確保只取函數返回值的第一個值,可以使用括號運算符,例如:

  

local function init()
  return 1, "lua"
end
print((init()),	2) -->output 1	 2
print(2, (init())) -->output 2 1

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM