Lua函数的可变长参数问题
function f(...)
a = select(3,...) -->从第三个位置开始,变量 a 对应右边变量列表的第一个参数
print (a)
print (select(3,...)) -->打印所有列表参数
end
f(0,1,2,3,4,5)
结果
2
2 3 4 5
为什么结果会不一样?明明都是select(3,...)
Lua函数的可变长参数问题
function f(...)
a = select(3,...) -->从第三个位置开始,变量 a 对应右边变量列表的第一个参数
print (a)
print (select(3,...)) -->打印所有列表参数
end
f(0,1,2,3,4,5)
结果
2
2 3 4 5
为什么结果会不一样?明明都是select(3,...)
【以下回答由 GPT 生成】
Lua 函数中的可变长参数使用 (...) 表示,它会将函数的所有参数打包成一个表,并可以通过表的索引来访问每个参数。
在给定的示例中,函数 f(...) 接受了一个可变长参数列表,并使用 select 函数来获取参数列表中的第三个参数。
在第一次打印中,a = select(3, ...) 将参数列表中的第三个参数赋值给变量 a,所以打印的结果为 2。
在第二次打印中,select(3, ...) 打印从参数列表中的第三个参数开始的所有参数,所以打印的结果为 2 3 4 5。
这里的不一致性在于,第一次打印只打印了一个值,而第二次打印打印了多个值。这是因为在第一次打印中,将 select(3, ...) 的结果赋值给了变量 a,所以只打印了这一个值。而在第二次打印中,直接打印了 select(3, ...) 所以打印了多个值。如果要使两次打印结果一致,可以将 select(3, ...) 的结果赋值给一个变量,然后打印这个变量即可。
针对给定的代码示例,对于不一致性的处理可以通过以下代码来实现:
function f(...)
a = select(3, ...)
print(a)
local args = {select(3, ...)}
print(table.unpack(args))
end
f(0,1,2,3,4,5)
这样,第一次打印和第二次打印都会打印 2 3 4 5。
【相关推荐】