在函数调用中解包表

时间:2018-02-07 03:32:01

标签: lua

不提供太多详细信息,此示例代码段演示了此问题:

-- Add an extra predefined argument
function one_more_arg(...)                                                                        
    local args = {...}
    return function()
        print(table.unpack(args), "c")
    end
end

local my_new_print = one_more_arg("a", "b")
my_new_print()  -- "a   c"

显然解压缩表在这种情况下不起作用。关于如何使这项工作的任何想法,即print都会收到"a", "b", "c"?我试图避免修改args,除非它是实现它的唯一方法。

2 个答案:

答案 0 :(得分:3)

当你将table.unpack()作为函数的参数放置时,应该没有其他参数,或者它应该是最后一个参数。否则,只传递表中的第一个值。

  

Lua总是将函数的结果数量调整为   电话的情况。当我们将一个函数称为语句时,Lua   丢弃所有结果。当我们使用调用作为表达式时,Lua   只保留第一个结果。我们只在通话时获得所有结果   表达式列表中的最后一个(或唯一)表达式。这些   列表出现在Lua的四个结构中:多个赋值,   函数调用,表构造函数和返回的参数   语句。

来自http://www.lua.org/pil/5.1.html

所以你可以尝试将unpack放在最后,如果你可以的话:

print("c", table.unpack(args))

或修改args

答案 1 :(得分:-1)

table.concat (list [, sep [, i [, j]]])

给定一个列表,其中所有元素都是字符串或数字,返回字符串列表[i] .. sep..list [i + 1]···sep..list [j]。 sep的默认值是空字符串,i的默认值是1,j的默认值是#list。如果i大于j,则返回空字符串。