Lua-几种可变长参数的遍历方式

Lua跟许多语言一样,提供了可边长函数参数的方式,那我们如果对这一组可变长参数进行遍历呢,lua为我们提供了两种方式,这两种方式各有优劣,我们一起来看一下。
第一种:直接对参数进行遍历

function add(...)
	local s = 0 
	for _,v in ipairs(...) do 
		s = s+v
	end
	return s 
end

这种方式十分简便,但是有个问题,它会自动跳过nil值,但是有时候我们需要取判断某个值是不是nil的时候,这种方法就做不到了。
第二种,使用table.pack 方法将变长参数打包成一个数组,此时会保存nil

function add(...)
	local s = 0  
	local args = table.pack(...)
	for i=1,args.n do
		s = s + args[i]
	end
	return s
end

在参数比较少的时候,创建一个新表args显然是不怎么合算的。此时我们有第三种遍历方式,通过select函数执行

function add(...) 
	local s = 0 
	for i=1 , select('#',...) do 
		s = s + select(i,...)
	end 
	return s 
end

select函数的作用是,取出…第i个参数后面所有参数,但是使用在+运算符后只取一个返回值,这样就可以作为取出…第i个返回值的作用了。但是这种方式在参数比较多的情况下,select的消耗会远远大于创建一个table的消耗。因此不如第二种方式更加合理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值