代码之家  ›  专栏  ›  技术社区  ›  trzczy

将“if let”与“or”结合起来,可以对一个值执行多次函数

  •  0
  • trzczy  · 技术社区  · 7 年前

    我试图实现的是在满足多个条件时对一个值多次执行函数。特别是我们有两个变量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>
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   dpassen    7 年前

    如果您替换代码,您所拥有的代码将按说明工作。 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
    
    推荐文章