如何实现可反转vararg可变参数的reverse函数?
实现支持包含nil的可变参数反转函数
在Lua中直接处理带nil的可变参数时,普通参数收集会被nil截断,所以要借助table.pack完整保留所有参数(包括长度信息),以下是满足需求的reverse函数实现:
function reverse(...) local args = table.pack(...) local reversed = {} for i = args.n, 1, -1 do reversed[#reversed + 1] = args[i] end return table.unpack(reversed, 1, args.n) end
关键说明:
table.pack(...)将可变参数打包为table,同时用n字段记录参数实际总数,避免nil导致的长度丢失。- 倒序遍历原参数表,将元素依次存入新表完成反转。
table.unpack(reversed, 1, args.n)明确指定解包范围,确保所有元素(包括中间的nil)都能作为可变参数返回。
测试验证:
local val1, val2, val3, val4, val5 = reverse(1, 2, 3, nil, 5) print(val1, val2, val3, val4, val5) -- 输出:5 nil 3 2 1
内容的提问来源于stack exchange,提问作者Luatic
相关产品推荐
相关产品推荐

