我想通过一系列函数对输入进行线程化,这正是 -> 运算符所做的。但是,如果任何函数返回 nil / false 那么我想中断评估并返回错误消息。我该怎么做,是否有一些提供此功能的运算符/宏?
问问题
153 次
2 回答
11
试试这个:-?>
来自文档:
(-?> "foo" .toUpperCase (.substring 1)) returns "OO"
(-?> nil .toUpperCase (.substring 1)) returns nil
如果您将使用->
宏作为第二个示例,您肯定会得到NullPointerException
.
于 2012-09-17T05:05:21.237 回答
3
中还有maybe-m
单子clojure.algo.monads
。作为 monads 框架的一部分,它比宏更重量级,因此如果您仍然使用 monads 或者如果您的计算图比简单的函数链更复杂-?>
,那么使用它是有意义的。maybe-m
与线程宏不同,domonad
组合可以处理多个参数函数,这些函数从多个先前的计算步骤中获取参数:
(domonad maybe-m
[a 1
b nil
c (* a b)]
c)
在这个例子中,(* a b)
不会被评估,因为b
它是 nil。整个表达式将返回 nil 而不是在尝试乘以 nil 时抛出异常。
于 2012-09-17T14:21:06.040 回答