标签: clojure functional-programming clojurescript
使用以下结构,可以进行真值测试(f1)并将结果保存到本地绑定变量a。如果真值测试是假的,整个表达式返回nil。如果它是真实的(不是假的),则将返回的值传递给第二个函数(f2),并返回结果。
(when-let [a (f1)] (f2 a))
有捷径吗?我不需要变量a作为中间步骤。
答案 0 :(得分:6)
核心库最接近的是some->
some->
(some-> (f1) (f2))
它的行为与when-let略有不同:因为some->线程每个非nil值,它也会线程false。在实践中,这种行为差异从来没有发生在我身上作为一个问题,因为返回你想传递给另一个函数的函数返回nil如果它们什么都没有,而不是false。
when-let
nil
false
答案 1 :(得分:5)
不,但你写一个很容易。我们称之为bind,原因无关紧要,除非你想阅读monad:
bind
(defn bind [v f] (when v (f v))) (bind (f1) f2)