【发布时间】: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)
【问题讨论】:
谁能解释为什么在下面的代码中,函数的名称在第一部分充当*(乘数)?
(defn bar
([a b] (bar a b 100))
([a b c] (* a b c)))
给bar 两个参数(bar 2 3) 产生(* 2 3 100)
【问题讨论】:
如果稍微重新格式化可能会更容易看到发生了什么:
(defn bar
([a b] (bar a b 100))
([a b c] (* a b c)))
这是一个具有多个参数的函数 - 也就是说,它接受多个参数集。第一个定义接受两个名为a 和b 的参数,第二个定义接受三个名为a、b 和c 的参数。当函数的第一个定义被调用时,它转身并调用函数的第二个定义,传递给第一个定义的a 和b 参数,并发送常量值 100 作为第三个参数. bar 的第二个定义简单地接受它给出的三个参数并使用 (* a b c) 将它们相乘。
希望这会有所帮助。
【讨论】:
你已经定义了一个有两个重载的函数——第一个接受两个参数,第二个接受三个。双参数重载只是调用三参数版本,将 100 作为第三个参数。
【讨论】: