0

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

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

给出bar两个 args(bar 2 3)产量(* 2 3 100)

4

2 回答 2

5

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

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

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

希望这可以帮助。

于 2015-06-10T11:09:51.230 回答
1

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

于 2015-06-10T11:05:52.663 回答