Lua可变长函数参数为nil

我正在尝试写一个柯里化函数在lua 5.2中。我的代码如下:

函数添加(a, b)
    返回a + b
end

函数咖喱(功能,价值)
    回归(function(...))
        返回func(value,table.unpackarg))
    结束
end

add2 = curry(add, 2)

print(add2(3))

但参数arg不包含传递到add2函数的值。

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

printResult =“”

函数打印(...)
  对于i,v in ipairsargdo - argnil
    printResult = printResult .. tostring(v) ..“\ t”
  结果
  printResult = printResult ..“\ n”
end

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

##编辑:

如用户@siffiejoe指出,我的函数只是做了部分应用,而不是正确的柯里化。这是我的lua中一个正确的柯里实现,使用已接受答案的错误修复。

function curry(func, params)
    回归(function(...)local args = params or {}
        如果#args + #{...} == debug.getinfo(func).nparams then
            local args = {table.unpack(args)}
            对于_,v in ipairs({...})do
                table.insert(args,v)
            结束
            返回func(table.unpack(args))
        else
            local args = {table.unpack(args)}
            对于_,v in ipairs({...})do
                table.insert(args,v)
            结束
            返回curry(func, args)
        结束
    结束
end

随意在这里建议更改并添加测试用例

点赞
用户2226988
用户2226988

自 Lua 5.1 开始,这个上下文中的 arg 已被 ... 替换(除了 ... 是一个列表而不是一个表)。

因此,table.unpack(arg) 应该只是 ...

请参阅Breaking Changes。Lua 参考手册非常好,特别是这个部分非常有用。

2016-08-03 16:42:30