Clojure:有没有理由详细说明函数定义中的arities?

时间:2016-05-17 08:25:58

标签: clojure arity

我目前正在编写具有未定义数量的arities的函数,所以我在clojure.core中寻找示例等等。

这是comp(clojure.core)

的定义
(defn comp
  "Takes a set of functions and returns a fn that is the composition
  of those fns.  The returned fn takes a variable number of args,
  applies the rightmost of fns to the args, the next
  fn (right-to-left) to the result, etc."
  {:added "1.0"
   :static true}
  ([] identity)
  ([f] f)
  ([f g] 
     (fn 
       ([] (f (g)))
       ([x] (f (g x)))
       ([x y] (f (g x y)))
       ([x y z] (f (g x y z)))
       ([x y z & args] (f (apply g x y z args)))))
  ([f g & fs]
     (reduce1 comp (list* f g fs))))

正如你所看到的,对于arities [f g],代码详细说明了2和3个参数(x y; x,y,z)的值,即使它可能只是直接跳转到[x& z]。参数]。

有任何表演原因吗?还是会议? 我想调用apply会影响效果,我不知道。

我们通常最多使用3D功能和2个功能的组合,也许就是因为它。

由于

1 个答案:

答案 0 :(得分:5)

Clojure的核心库通常以不是特别惯用的方式实现,特别是出于性能原因。如果你正在编写一个对你程序中的大多数代码行都很重要的函数,你也可以这样做,但总的来说这并不优雅或特别建议。