日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openresty开发系列14--lua基础语法3函数

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。