Lua变长函数参数为nil

Kel*_*all 1 null lua functional-programming variadic-functions

我正在尝试在lua 5.2中编写一个curry函数.我的代码看起来像这样:

function add(a, b)
    return a + b
end

function curry(func, value)
    return (function (...)
        return func(value, table.unpack(arg))
    end)
end

add2 = curry(add, 2)

print(add2(3))
Run Code Online (Sandbox Code Playgroud)

arg但是该参数不包含传递给add2函数的值.

当我尝试从Lua文档运行示例时,它会出错,因为arg是nil.

printResult = ""

function print (...)
  for i,v in ipairs(arg) do -- arg is nil
    printResult = printResult .. tostring(v) .. "\t"
  end
  printResult = printResult .. "\n"
end
Run Code Online (Sandbox Code Playgroud)

如果不起作用,如何在5.2中使用可变长度函数?

编辑:

正如用户@siffiejoe指出的那样,我的功能只是部分应用,而不是正确的currying.这是我使用接受的答案中的错误修复在lua中实现正确的curry函数.

function curry(func, params)        
    return (function (...)
        local args = params or {}        
        if #args + #{...} == debug.getinfo(func).nparams then
            local args = {table.unpack(args)}
            for _,v in ipairs({...}) do
                table.insert(args, v)
            end
            return func(table.unpack(args))
        else
            local args = {table.unpack(args)}
            for _,v in ipairs({...}) do
                table.insert(args, v)
            end
            return curry(func, args)
        end
    end)
end
Run Code Online (Sandbox Code Playgroud)

随意建议更改并在此处添加测试用例

Tom*_*get 6

由于Lua 5.1,arg在此上下文中已被替换...(除了后者是列表而不是表).

所以,table.unpack(arg)应该只是....

请参阅重大变化.Lua参考手册非常好,特别是这一部分非常有用.