Lua 嵌套解包 Bug?

我正在尝试把一个数组解包成另一个数组,但只有在它是最后一个解包的项目时才有效,如果后面还有其他项目,只有第一个元素被解包。以下是我想要做的事情的基本示例。有更好的方法吗,还是这是一个我必须应对的 bug?我不想使用 table.insert,因为这似乎比在表定义中使用 unpack 添加更易读。

代码:

   print ("Error 1")
   local table1 = { {1,1}, {2,2}, {3,3} }
   local table2 = { {0,0}, unpack (table1), {4,4} }
   for n,item in ipairs (table2) do print (unpack(item)) end

   print ("Good")
   table1 = { {1,1}, {2,2}, {3,3} }
   table2 = { {0,0}, unpack (table1) }
   for n,item in ipairs (table2) do print (unpack(item)) end

   print ("Error 2")
   table1 = { {1,1}, {2,2}, {3,3} }
   table2 = { {0,0}, unpack (table1), unpack (table1) }
   for n,item in ipairs (table2) do print (unpack(item)) end

输出:

Error 1
0       0
1       1 -- {2,2} & {3,3} cut off.
4       4
Good
0       0
1       1 -- 所有元素都被解包了。
2       2
3       3
Error 2
0       0
1       1 -- {2,2} & {3,3} cut off.
1       1 -- 所有元素都被解包了。
2       2
3       3

注意:

我正在运行版本 5.1。

原文链接 https://stackoverflow.com/questions/5112954

点赞
stackoverflow用户107090
stackoverflow用户107090

不是一个 bug。如果一个函数调用返回多个值,并且这个调用不是最后一个,Lua 会将其调整为第一个值。手册上有详细说明,可以参考http://www.lua.org/manual/5.1/manual.html#2.5

2011-02-25 03:09:05