- >运算符在遇到nil / false返回时中断评估

时间:2012-09-17 04:57:50

标签: clojure

我想通过一系列函数来处理输入,就像 - >运营商。但是,如果任何函数返回nil / false,那么我想打破评估并返回错误消息。我该怎么做,是否有一些提供此功能的运算符/宏?

2 个答案:

答案 0 :(得分:11)

试试这个:-?> 来自文档:

(-?> "foo" .toUpperCase (.substring 1)) returns "OO"
(-?> nil .toUpperCase (.substring 1)) returns nil

如果您将第二个示例使用->宏,则肯定会获得NullPointerException

答案 1 :(得分:3)

maybe-m中还有clojure.algo.monads monad。作为monads框架的一部分,它比-?>宏更重要,所以如果你正在使用monad或者你的计算图比一个简单的函数链更复杂,那么使用maybe-m是有意义的。

与线程宏不同,domonad组合可以处理多个参数函数,这些函数从多个先前的计算步骤中获取参数:

(domonad maybe-m
    [a 1
     b nil
     c (* a b)]
    c)

在此示例中,(* a b)将无法评估,因为b为零。整个表达式将返回nil,而不是尝试乘以nil而抛出异常。