我偶然发现了lua的奇怪行为.代码示例:
function foo()
local t = {'a', 'b', 'c'}
return unpack(t)
end
function bar()
local t = {'x', 'y'}
return unpack(t)
end
b = { foo(), bar() }
for k,v in pairs(b) do
print(k,v)
end
Run Code Online (Sandbox Code Playgroud)
此代码的结果是:
1 a
2 x
3 y
Run Code Online (Sandbox Code Playgroud)
因此,foo()除第一个元素外,所有结果都被丢弃.问题是,为什么有些元素被丢弃了?我已经简要检查了lua 5.2手册,但我没有看到这种行为的解释.
问题是,为什么有些元素被丢弃了?
因为这就是Lua的工作方式.导致多个值(函数调用和...)的表达式,当在事物列表(例如表构造函数或函数调用参数列表)的上下文中使用时,只会将它们的所有值添加到该列表中(如果它是最后一个)列表的元素.
所以:
{foo, ...}
Run Code Online (Sandbox Code Playgroud)
将所有的varargs放在最后.
{..., foo}
Run Code Online (Sandbox Code Playgroud)
只会将第一个varargs放入表中.
如果要捆绑多个这样的函数调用,则必须使用一个函数将table.insert每个元素单独放入列表中.