我试图实现的是,当满足多个条件时,多次对一个值执行函数。特别是假设我们有两个变量 a 和 b。
当 a 为真时,该值由与 a 关联的函数转换,则当 b 为真时,新值由与 B 关联的函数转换。
因此,当初始值为 0 并且函数inc
且#(+ 5 %)
时,我们可以得到 0、1、5 或 6。
我的方法如下,但没有成功
user> (def initial-number 0)
user> (if-let [a true b true] (cond-> initial-number a inc b (#(+ 5 %))))
IllegalArgumentException clojure.core/if-let requires exactly 2 forms in binding vector in user: clojure.core/if-let (core.clj:1758)
user>
如果您用
if-let
替换let
,您拥有的代码将按描述工作。所有条件逻辑都存在于cond->
中。
(def initial-number 0)
(let [a true b true] (cond-> initial-number a inc b (#(+ 5 %)))) => 6
(let [a false b true] (cond-> initial-number a inc b (#(+ 5 %)))) => 5
(let [a true b false] (cond-> initial-number a inc b (#(+ 5 %)))) => 1
(let [a false b false] (cond-> initial-number a inc b (#(+ 5 %)))) => 0