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