Lua學習---函數定義

1.函數定義的格式:

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

  function function_name (arc)    --arc表示參數列表,函數的參數列表能夠爲空函數

    --body性能

  endlua

上面的語法等價於:blog

  function_name function_name (arc)字符串

    --bodyit

  end_io

上面的方法都是定義了一個全局函數,爲了避免污染命名空間,同時減小性能損耗,咱們應該儘可能使用「局部函數」,方法以下(只須要再前面加local聲明便可):table

  local function function_name (arc)    --arc表示參數列表,函數的參數列表能夠爲空function

    --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
相關文章
相關標籤/搜索