gpt4 book ai didi

Lua 变长函数参数为 nil

转载 作者:行者123 更新时间:2023-12-05 08:33:32 26 4
gpt4 key购买 nike

我正在尝试写一个 curry function在 lua 5.2 中。我的代码如下所示:

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))

然而,参数 arg 不包含传递给 add2 函数的值。

当我尝试运行 Lua documentation 中的示例时它出错,因为 arg 为零。

printResult = ""

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

如果这不起作用,我如何在 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

欢迎调用suggest changes and add test cases here

最佳答案

从 Lua 5.1 开始,arg 在这个上下文中被替换为 ...(除了后者是列表而不是表格)。

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

参见 Breaking Changes . Lua 引用手册非常好,这部分尤其有用。

关于Lua 变长函数参数为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com