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)