gpt4 book ai didi

functional-programming - 在 Lua 中调用作为参数传递的函数

转载 作者:行者123 更新时间:2023-12-02 08:42:47 25 4
gpt4 key购买 nike

我有这个代码

Option = { }


function Option.nothing( )
local self = { isNone = true, isSome = false }

function self:orElse( alt )
return alt
end

function self:map( f )
return Option.nothing( )
end

function self:exec( f )
end

function self:maybe( alt, f )
return alt
end

return self
end



function Option.just( val )
local self = { isNone = false, isSome = true }
local value = val

function self:orElse( alt )
return value
end

function self:map( f )
return Option.just( f(value) )
end

function self:exec( f )
f( value )
end

function self:maybe( alt, f )
return f(value)
end

return self
end



function printOpt( opt )
local str = opt.maybe( "Nothing", function(s) return "Just " .. s end )
print( str )
end


x = Option.nothing( )
y = Option.just( 4 )

printOpt(x)
printOpt(y)

但我一直在这里“尝试调用本地‘f’(一个零值)”:

  function self:maybe( alt, f )
return f(value)
end

我似乎无法调用作为参数传递的函数。

最佳答案

您将函数声明为 self:maybe(),但您将其称为 opt.maybe()。您应该将其称为 opt:maybe()

将其声明为 self:maybe(alt, f) 等同于将其声明为 self.maybe(self, alt, f)。因此,如果您使用 . 调用它,则需要 3 个参数。您传递的是 2,因此 self 最终成为 "Nothing",而 alt 最终成为函数对象。

但是,通过将其称为 opt:maybe("Nothing", f) 这等同于说 opt.maybe(opt, "Nothing", f)它提供了所需的 3 个参数。

关于functional-programming - 在 Lua 中调用作为参数传递的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15107837/

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