我正在尝试在python中实现Maybe monad.然而,我也想要的是某种链接能力.
所以我有一节课:
class Maybe:
def __init__(self, val):
self.val = val
def do(self, func): # Bind function
if self.val is None:
return None
else:
return func(self.val)
Run Code Online (Sandbox Code Playgroud)
我有两个功能:
def double(number):
try:
result = number * 2
return Maybe(result)
except:
return Maybe(None)
def square(number):
try:
result = number * number
return Maybe(result)
except:
return Maybe(None)
Run Code Online (Sandbox Code Playgroud)
这是我如何使用它:
result = Maybe(5).do(double).do(square)
print(result.val)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种链接多个函数的方法,每个函数执行一个特定的任务.每个函数都将前一个函数的输出作为输入.如果链中的任何函数抛出异常,链应该断开.
这是对Maybe monad进行建模的正确方法吗?
这是处理异常的正确方法吗?
这可以改进吗?
非常感谢.