1. 程式人生 > 其它 >lua基本語法之函式

lua基本語法之函式

一)function (函式)

有名函式:

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end

optional_function_scope: 該引數是可選的制定函式是全域性函式還是區域性函式,未設定該引數預設為全域性函式,如果你需要設定函式為區域性函式需要使用關鍵字 local。

function 函式定義關鍵字

function_name: 指定函式名稱。

argument1, argument2, argument3..., argumentn: 函式引數,多個引數以逗號隔開,函式也可以不帶引數。

function_body: 函式體,函式中需要執行的程式碼語句塊。

result_params_comma_separated: 函式返回值,Lua語言函式可以返回多個值,每個值以逗號隔開

end:函式定義結束關鍵字

1)函式例項

--[[ 函式返回兩個值的最大值 --]]

function max(num1, num2)

   if (num1 > num2) then
      result = num1;
   else
      result = num2;
   end

   return result; 
end
-- 呼叫函式
print("兩值比較最大值為 ",max(10,4))
print("兩值比較最大值為 ",max(5,6))

=============================

匿名函式

optional_function_scope function_name = function (argument1, argument2, argument3..., argumentn)
	function_body
	return result_params_comma_separated
end

有名函式的定義本質上是匿名函式對變數的賦值。為說明這一點,考慮

function foo()
end
等價於
foo = function ()
end

類似地,
local function foo()
end
等價於
local foo = function ()
end

==============================
local function 與 function 區別

1 使用function宣告的函式為全域性函式,在被引用時可以不會因為宣告的順序而找不到
2 使用local function宣告的函式為區域性函式,在引用的時候必須要在宣告的函式後面

function test()
    test2()
    test1()
end

local function test1()
    print("hello test1")
end

function test2()
    print("hello test2")
end

test()

local function test1()
    print("hello test1")
end

function test()
    test2()
    test1()
end

function test2()
    print("hello test2")
end

test()

==========================

函式引數

  1. 將函式作為引數傳遞給函式
local myprint = function(param)
   print("這是列印函式 -   ##",param,"##")
end

local function add(num1,num2,functionPrint)
   result = num1 + num2

   functionPrint(result)
end

add(2,5,myprint)

2)傳引數,lua引數可變

local function foo(a,b,c,d)
	print(a,b,c,d)
end
  • 若引數個數大於形參個數,從左向右,多餘的實參被忽略

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


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

function average(...)
   result = 0
   local arg={...}
   for i,v in ipairs(arg) do
      result = result + v
   end
   print("總共傳入 " .. #arg .. " 個數")
   return result/#arg
end

print("平均值為",average(1,2,3,4,5,6))

==============================

3)返回值

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

函式返回值的規則:

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

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

	local function init()
		return 1,"lua";
	end 

	local x,y,z = init();

	print(x,y,z);

注意:

  1)當一個函式返回一個以上的返回值,且函式呼叫不是一個列表表示式的最後一個元素,那麼函式只返回第一個返回值

	local function init()
		return 1,"lua";
	end 

	local x,y,z = 2,init();  --local x,y,z = init(),2;

	print(x,y,z);

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

    local function init()
		return 1,"lua";
	end 

	local x,y,z = 2,(init());

	print(x,y,z);
	```