1

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

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

4

1 回答 1

9

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

因为这就是 Lua 的工作方式。产生多个值的表达式...函数调用和列表的元素。

所以:

{foo, ...}

将所有可变参数放在最后。

{..., foo}

只会将第一个可变参数放入表中。

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

于 2013-01-06T20:34:31.853 回答