Lua 函数 - 可变参数

Lua 函数 - 可变参数

参考至菜鸟教程。

  Lua函数可以接收可变数目的参数,和C语言类似,在函数参数列表中使用三点...表示函数有可变的参数。

function add(...)  
local s = 0  
  for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
    s = s + v  
  end  
  return s  
end  
print(add(3,4,5,6,7))  --->25

  同时我们可以将可变参数赋值给一个变量。

  例如,我们计算几个数的平均值:

function average(...)
    result = 0
    local arg = {...}    --> arg 为一个表,局部变量
    for i,v in ipairs(arg) do
       result = result + v
    end
    print("总共传入 " .. #arg .. " 个数")  --> #数组变量名 可以获取数组长度,但是如果这个数组中包含nil,那么需要通过select获取
    return result/#arg
end
 
print("平均值为",average(10,5,3,4,5,6))

输出结果:

效果图

  我们也可以通过select("#",...)来获取可变参数的数量:

function average(...)
    result = 0
    local arg = {...}    --> arg 为一个表,局部变量
    for i,v in ipairs(arg) do
       result = result + v
    end
    print("总共传入 " .. select("#",...) .. " 个数") 
    return result/select("#",...)
end
 
print("平均值为",average(10,5,3,4,5,6))

输出结果与上述一样。

  有些我们可能需要几个固定参数加上可变参数,固定参数必须放在变长参数之前:

function FWrite(fmt,...)
    print(string.format(fmt,...))
end

FWrite("test")
FWrite("%d %d",1,2)

输出结果:

效果图

  通常在遍历变长参数的时候只需要使用 {…},然而变长参数可能会包含一些 nil,那么就可以用 select 函数来访问变长参数了:select(‘#’, …) 或者 select(n, …)

  • select('#',...)返回可变参数的长度。
  • select(n, …) 用于返回从起点 n 开始到结束位置的所有参数列表。

  调用select时,必须传入一个固定的实参selector(选择开关)和一系列参数。如果selector为数字n,那么select返回参数列表中从索引n开始到结束的所有参数列表,否则只能为字符串#,这样select返回变长参数的总数。

function f(...)
    a = select(3,...)  -->从第三个位置开始,变量 a 对应右边变量列表的第一个参数
    print (a)
    print (select(3,...)) -->打印所有列表参数
end

f(0,1,2,3,4,5)

输出结果为:

效果图

实例:

function foo(...)  
    for i = 1, select('#', ...) do  -->获取参数总数
        local arg = select(i, ...); -->读取参数,arg 对应的是右边变量列表的第一个参数
        print("arg", arg);  
    end  
end  

foo(1, 2, 3, 4);

输出结果:

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ufgnix0802

总结不易,谢谢大家的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值