多方法表现

时间:2010-06-16 12:15:07

标签: clojure

使用多种方法的性能有何影响?如果我有2个具有相同名称的函数,并且相同数量的参数只有类型(list与int)不同,那么我的性能会受到很大影响吗?

换句话说,最好为我的矢量添加功能命名:“add-vector”或将其保留为“add”或“+”?

(为了简单起见,我们忽略了我可能重新定义内置函数的问题,比如“+”)。

2 个答案:

答案 0 :(得分:9)

使用多方法会产生性能成本,但除非绝对必要,否则如果它们是最佳抽象方式,则应继续使用它们。

尽管如此,Clojure 1.2的protocols为某些用例提供了多种方法的本地速度替代方案,特别适用于以前可能使用类型的多方法的情况 - 基于派遣。

答案 1 :(得分:1)

由于Clojure可以使用任意调度函数,因此多方法的额外成本是调度函数的成本+地图查找。

或者像塞梅里克所说的那样:

(defmulti can-your-dispatch-do-that?
  (fn [& _]
    (if (= (phase-of-moon) :full)
      :do-this
      :do-that)))