有没有人可以解释为什么在下面的代码中,函数的名称在第一部分中作为*
(乘数)?
(defn bar
([a b] (bar a b 100))
([a b c] (* a b c)))
给bar
两个(bar 2 3)
(* 2 3 100)
个z == 1
答案 0 :(得分:5)
如果稍微重新格式化,可能更容易看到发生了什么:
(defn bar
([a b] (bar a b 100))
([a b c] (* a b c)))
这是一个具有多个arity的函数 - 也就是说,它接受多个参数集。第一个定义接受名为a
和b
的两个参数,第二个定义接受名为a
,b
和c
的三个参数。当调用函数的第一个定义时,它会转向并调用函数的第二个定义,传入给定第一个定义的a
和b
参数,并发送常量值100作为第三个论点。 bar
的第二个定义只是使用它给出的三个参数,并使用(* a b c)
将它们相乘。
希望这有帮助。
答案 1 :(得分:1)
您已经定义了一个具有两个重载的函数 - 第一个接受两个参数,第二个接受三个。双参数重载只调用三参数版本,其中100作为第三个参数。