09,Lua 函数_01(可变参数)

     Lua中的函数可以接受不定数量的实参,对于不定数量的实参,可以通过传入3点(...)的方式进行参数匹配;

当函数参数列表中传入3点(...)时,则表示该函数有可变的参数。当传入"可变参数"函数被调用时它的所有参数都会被收集到一起,这部分收集起来的实参称为这个函数的"变长实参"。

    一个函数要访问它的变长参数时,仍需要用到3点(...)。但不同的是,此时这3个点是作为一个表达式来使用的。譬如:

   1,表达式"...":类似于一个具有多重返回值的函数,它返回的是当前函数的所有变长参数。

local a, b = ...
--这里用第一个和第二个变长参数的数值来初始化a,b这两个局部变量。

      2,表达式{...}:表示由所有变长参数构成的数组table,在遍历变长参数时可使用这种表达式的方式,就像访问table一样,访问所有的变长函数。

    注意:然而在某些特殊情况下,变长参数可能会包含一些故意传入的nil值,此时就需要用函数select来访问变长参数了。示例:

    (1)ipairs方式遍历

 


    (2)pairs方式遍历



    (3)select方式



调用select时,必须传入一个固定的实参selector(选择哪个位置的参数进行访问)和变长参数本身。如果selector为数字n,那么select返回它的第n个可变实参。否则,selector只能为字符串"#",这样select会返回变长参数的总数(包括nil值)。

   Lua 5.0对于变长参数则有另外一套机制。声明函数的语法是一样的,也是将3个点作为最后一个参数。但是Lua5.0没有提供"..."表达式。而是通过一个隐含的局部table变量"arg"来接受所有的变长参数。这个table还有一个名为"n"的字段,用来记录变长参数的总数。大致行为如下:

function foo(a, b, ...)
   local arg = {...}
   arg.n = select("#", ...)
   <函数体>
end




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值