【问题标题】:Combining "if-let" with "OR" so functions may be executed several times on one value将“if-let”与“OR”相结合,因此函数可以在一个值上执行多次
【发布时间】:2019-05-28 18:46:16
【问题描述】:

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


    【解决方案1】:

    如果您将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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2017-09-21
      相关资源
      最近更新 更多