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

Combining "if-let" with "OR" so functions may be executed several times on one value

我想要实现的是在满足多个条件时多次对一个值执行函数。特别是说我们有两个变量 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>

如果将 let 替换为 if-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