openresty开发系列14--lua基础语法3函数
openresty開發系列14--lua基礎語法3函數
一)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
a、若參數個數大于形參個數,從左向右,多余的實參被忽略
b、若實參個數小于形參個數,從左向右,沒有被初始化的形參被初始化為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);
轉載于:https://www.cnblogs.com/reblue520/p/11429715.html
總結
以上是生活随笔為你收集整理的openresty开发系列14--lua基础语法3函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openresty开发系列13--lua
- 下一篇: openresty开发系列15--lua