Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 在函数调用中解包表_Lua - Fatal编程技术网

Lua 在函数调用中解包表

Lua 在函数调用中解包表,lua,Lua,在不提供太多细节的情况下,此示例片段演示了问题: -- Add an extra predefined argument function one_more_arg(...) local args = {...} return function() print(table.unpack(args), "c") en

在不提供太多细节的情况下,此示例片段演示了问题:

-- 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
,除非这是实现它的唯一方法

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

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

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

Lua始终将函数的结果数调整为 电话的情况。当我们将函数作为语句调用时,Lua 放弃其所有结果。当我们使用调用作为表达式时,Lua 只保留第一个结果。只有在通话结束时,我们才能得到所有结果 表达式列表中的最后一个(或唯一)表达式。这些 列表在Lua中以四种结构显示:多重赋值, 函数调用、表构造函数和返回的参数 声明

因此,如果您觉得合适,您可以尝试将
解包
放在末尾:

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

或者修改
args

第三个选项:如果可能,使用:
打印(vararg.append(“c”,table.unpack(args))
本地args={…};表.插入(args,“c”)