Lua:将多个结果从函数传递给表构造函数

时间:2013-01-06 20:25:31

标签: lua

我偶然发现了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

此代码的结果是:

1   a
2   x
3   y

因此,foo()的结果除第一个元素外都被丢弃。问题是,为什么有些元素被丢弃了? 我已经简要检查了lua 5.2手册,但我没有看到这种行为的解释。

1 个答案:

答案 0 :(得分:6)

  

问题是,为什么有些元素会被丢弃?

因为这就是Lua的工作原理。 Expressions that result in multiple values(函数调用和...),当在事物列表(例如表构造函数或函数调用参数列表)的上下文中使用时,只会将所有值添加到该列表中它是列表的 last 元素。

所以:

{foo, ...}

将所有的varargs放在最后。

{..., foo}

只会将第一个varargs放入表中。

如果你想捆绑这样的多个函数调用,你必须使用一个函数,将每个元素table.insert分别放入列表中。