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