Functional programming 在Lua中调用作为参数传递的函数
我有这个密码Functional programming 在Lua中调用作为参数传递的函数,functional-programming,lua,Functional Programming,Lua,我有这个密码 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 fun
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”(一个nil值):
似乎调用作为参数传递的函数时遇到问题。您将函数声明为
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个参数。Mike,如果您要编辑我的代码,请确保您实际上是正确的。maybe()
的第一个参数,即self
,确实获得了值“Nothing”
。它不会得到nil
。如果您感到困惑,OP源代码中对opt.maybe()
的一次调用将其称为opt.maybe(“Nothing”,函数)…end)
function self:maybe( alt, f )
return f(value)
end