不提供太多详细信息,此示例代码段演示了此问题:
-- 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
,除非它是实现它的唯一方法。
答案 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,则返回空字符串。