table.unpack() 只返回第一个元素。

有人能解释一下为什么在调用函数时,table.unpack() 返回原始表中的第一个元素,只有在 table.unpack() 后跟其他参数时?下面是一些演示代码:

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

我不明白为什么第二行只打印出 1 Test。我本来期望它打印出 1 2 3 4 5 Test。有人能解释这种行为吗?我也对如何使第二个调用打印出 1 2 3 4 5 Test 感兴趣。

点赞
用户2002471
用户2002471

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

2015-09-07 13:23:04
用户5233270
用户5233270

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

根据官方手册

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

因此,一个变通方法是将其余的参数追加到表中,并使表成为最后一个参数。

2015-09-07 13:25:06