Clojure:when-let 的快捷方式

Clojure: shortcut for when-let

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

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

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

没有,但是你写一个很容易。我们将其称为 bind,原因无关紧要,除非您想阅读有关 monad 的内容:

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

(bind (f1) f2)

最接近核心库的是some->

(some-> (f1) (f2))

它的行为与when-let略有不同:因为some->线程每个非nil值它也线程false。在实践中,这种行为差异对我来说从来没有成为问题,因为函数 return 你想传递给另一个函数的东西 return nil 如果他们什么也没得到,而不是 false