Clojure将名称定义为乘数

0 clojure defn

任何人都可以解释为什么在下面的代码中,函数的名称在第一部分作为*(乘数)?

(defn bar
     ([a b]   (bar a b 100))
     ([a b c] (* a b c)))
Run Code Online (Sandbox Code Playgroud)

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

Bob*_*ica 5

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

(defn bar
  ([a b]   (bar a b 100))
  ([a b c] (* a b c)))
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助.