【问题标题】:Clojure defn name as multiplierClojure 将名称定义为乘数
【发布时间】:2015-06-10 10:59:27
【问题描述】:

谁能解释为什么在下面的代码中,函数的名称在第一部分充当*(乘数)?

(defn bar
     ([a b]   (bar a b 100))
     ([a b c] (* a b c)))

bar 两个参数(bar 2 3) 产生(* 2 3 100)

【问题讨论】:

    标签: clojure defn


    【解决方案1】:

    如果稍微重新格式化可能会更容易看到发生了什么:

    (defn bar
      ([a b]   (bar a b 100))
      ([a b c] (* a b c)))
    

    这是一个具有多个参数的函数 - 也就是说,它接受多个参数集。第一个定义接受两个名为ab 的参数,第二个定义接受三个名为abc 的参数。当函数的第一个定义被调用时,它转身并调用函数的第二个定义,传递给第一个定义的ab 参数,并发送常量值 100 作为第三个参数. bar 的第二个定义简单地接受它给出的三个参数并使用 (* a b c) 将它们相乘。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      你已经定义了一个有两个重载的函数——第一个接受两个参数,第二个接受三个。双参数重载只是调用三参数版本,将 100 作为第三个参数。

      【讨论】:

        猜你喜欢
        • 2020-09-03
        • 2023-02-07
        • 2022-08-22
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 2021-11-28
        • 2020-01-28
        • 2016-06-26
        相关资源
        最近更新 更多