Clojure:when-let的快捷方式

时间:2016-02-13 23:28:29

标签: clojure functional-programming clojurescript

使用以下结构,可以进行真值测试(f1)并将结果保存到本地绑定变量a。如果真值测试是假的,整个表达式返回nil。如果它是真实的(不是假的),则将返回的值传递给第二个函数(f2),并返回结果。

(when-let [a (f1)]
   (f2 a))

有捷径吗?我不需要变量a作为中间步骤。

2 个答案:

答案 0 :(得分:6)

核心库最接近的是some->

(some-> (f1) (f2))

它的行为与when-let略有不同:因为some->线程每个非nil值,它也会线程false。在实践中,这种行为差异从来没有发生在我身上作为一个问题,因为返回你想传递给另一个函数的函数返回nil如果它们什么都没有,而不是false

答案 1 :(得分:5)

不,但你写一个很容易。我们称之为bind,原因无关紧要,除非你想阅读monad:

(defn bind [v f]
  (when v (f v)))

(bind (f1) f2)