请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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);


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua元表中的 __index键值发布时间:2022-07-22
下一篇:
Lua中的模块与module函数详解发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap