将"if-let"与"OR"相结合,因此可以在一个值上多次执行函数



我试图实现的是,当满足多个条件时,多次对一个值执行函数。特别是假设我们有两个变量 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

最新更新