lua 函数的可变参数

lua 函数的可变参数我觉得是蛮好用的,传入,解包都比较清晰明了

1 遍历可变参数

local function test(...)
	local arg = {...}
	for k, v in pairs(arg) do
		print (k ,' is ', v)
	end
end


test(1,2,33, 'ab',  var, 'eg', {1,2})

运行结果为:


可以看到k值是整数的索引,没有索引5,因为他是一个nil值,如果用ipairs来遍历,那么只会打印前4组值.

如果我们只关注第n个参数,那么只需调用select(n, ...)

local function test(...)
	local v3 = select('3', ...)    
	print('v3 is ', v3)
	local v7 = select(7, ...)
	for k, v in ipairs(v7) do
		print (k ,' is ', v)
	end

end

test(1,2,33, 'ab',  var, 'eg', {11,22})

运行结果为:


我们看到select的索引参数既可以为int,也可以为string,如'1'.

顺便说一句,想要知道整个可变参数的长度,除了调用#{...},还可以用下面的

local len= select('#', ...)  等价于#{...}

他包括了可变参数中有nil值的个数,当nil只有一个,切不为最后一个时.即#{1,2,3nil} ===3, #{1,2,3,nil,5} === 5,注意#{1,2,3,nil,4,nil} ===3

另外可变参数只能在参数后面,例如function_name(var1, var2, ...),那么传入参数时,从第三个参数算起为可变参数

有个疑问,select(n, p1,p2,p3,...)和t[n],t为{p1,p2,p3,...}的区别是什么?

select(n,p1,p2,p3,...)其实是返回的[pn,pN]的序列,即

pn, pn+1,... = select(n,p1,p2,p3,...)

select参数也可以是固定的,例如select(n, 1,2,3),可以对表select(n,table.unpack(tab))




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值