Lua表构造器的值可以看作是多值返回函数调用。

使用 Lua(5.1),我想将表填充为返回多个值的函数。不幸的是,由于 Lua 规范,这种函数调用只会为最后一个返回值扩展。

function get2() return 1, 2 end
local t = { get2(), get2() }
for _,v in pairs(t) do print(v) end

返回:1, 1, 2

除了下面这种麻烦的技巧之外,是否还有其他方法可以实现?

table = {};
res1, res2 = get2();
table[#table + 1] = res1;
table[#table + 1] = res2
点赞
用户1008957
用户1008957

不,没有直接的方法可以做到这一点。

但是你可以使用一个辅助函数来简化代码。

function get2() return 1, 2 end

function appendMultiple(t, ...)
  for i=1, select('#', ...) do
    t[#t+1] = select(i, ...)
  end
end

local t = { }
appendMultiple(t, get2())
appendMultiple(t, get2())

for _,v in pairs(t) do print(v) end
--> 1  2  1  2
2012-12-23 15:52:26