函数式编程中的单子与逻辑编程实战
1. 异常单子的短路特性
异常单子(Exception monad)的失败实例可用于短路单子组合。当异常单子包含错误时,将其绑定到函数不会调用该函数,这与使用异常来停止计算类似。可以使用 bind 函数验证这一点,示例如下:
user> (cc/bind (cme/try-on (/ 1 1)) #(-> % inc cc/return))
#<Success@116ea43 [2]>
user> (cc/bind (cme/try-on (/ 1 0)) #(-> % inc cc/return))
#<Failure@0x1c90acb [#<java.lang.ArithmeticException>]>
还可以使用 cats.monads.exception 命名空间中的 try-or-else 和 try-or-recover 宏创建异常单子实例。
- try-or-else 形式必须传入一个表达式和一个默认值。若表达式抛出异常,默认值将被包装在异常单子实例中返回。
- try-or-recover 形式必须传入一个一元函数。遇到错误时,该宏将调用提供的函数并传递其返回值。
示例如下:
user&g
超级会员免费看
订阅专栏 解锁全文
755

被折叠的 条评论
为什么被折叠?



