2016-02-13 87 views
1

通过以下结构,可以进行真值测试(f1)并将结果保存到本地绑定的变量a中。如果真值测试是错误的,则整个表达式返回零。如果它是真的(而不是假的),则返回的值被传递给第二个函数(f2),并返回结果。Clojure:when-let的快捷方式

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

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

回答

6

您可以使用核心库中得到的最接近的是some->

(some-> (f1) (f2)) 

其行为不同从when-let略微:因为some->线程每个非nil值它也线程false。在实践中,这种行为上的差异从来没有出现过,因为返回想要传递给另一个函数的函数返回nil,如果它们什么也没有,而不是false

5

不,但是写起来很容易。我们叫它bind,为除非你想阅读有关单子那没关系的原因:

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

(bind (f1) f2)