【问题标题】:table.unpack() only returns the first element [duplicate]table.unpack() 只返回第一个元素[重复]
【发布时间】:2015-12-03 01:40:22
【问题描述】:

有人可以向我解释为什么table.unpack() 只有在table.unpack() 之后带有附加参数的函数调用中使用它时才返回第一个表格元素?

这是一些演示代码:

local a = {1,2,3,4,5}
print("Test", table.unpack(a))   -- prints "Test 1 2 3 4 5"
print(table.unpack(a), "Test")   -- prints "1 Test"

我不明白为什么第二行只打印1 Test。我希望它打印1 2 3 4 5 Test。有人可以解释这种行为吗?我也对如何进行第二次调用打印1 2 3 4 5 Test 感兴趣。

【问题讨论】:

标签: lua lua-table


【解决方案1】:

table.unpack 返回多个值。在这种情况下定义的行为是,如果它不是表达式列表中的最后一个,则除了第一个返回值之外的所有值都将被丢弃。

来自book

Lua 总是根据调用的情况调整函数的结果数量。当我们将函数作为语句调用时,Lua 会丢弃它的所有结果。当我们使用调用作为表达式时,Lua 只保留第一个结果。只有当调用是表达式列表中的最后一个(或唯一的)表达式时,我们才会得到所有结果。

作为一种解决方法,您可以将其余参数附加到表中,并以这种方式使表成为最后一个参数。

【讨论】:

  • 很高兴您从文档中找到了引用。 :)
  • 我也是,几个月前我才读过... :)
【解决方案2】:

table.unpack() 在任何一种情况下都返回相同的东西,但在第二种情况下,Lua 只期望一个值,因此它不会将其转换为多个参数。当它是最后一个参数时,Lua 可以将它变成多个参数。

【讨论】:

  • 谢谢。所以我想没有办法让第二次调用返回“1 2 3 4 5 Test”?
  • @Andreas 只有当调用是表达式列表中的最后一个(或唯一一个)表达式时,我们才会得到所有结果。在另一个答案中听起来很清楚。
  • 是的,我知道,我只是问,因为也许有一个技巧或什么可以解决这种行为:)
  • @Andreas:在解包之前附加到表格,因为它可能适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 2011-07-12
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
相关资源
最近更新 更多