Производительность мультиметоды - PullRequest
6 голосов
/ 16 июня 2010

Какое снижение производительности при использовании нескольких методов? Если у меня есть 2 функции с одинаковым именем и одинаковым количеством аргументов, которые отличаются только типом (list и int), сильно пострадает моя производительность?

Другими словами, лучше назвать мою функцию добавления вектора: «add-vector» или оставить ее как «добавить» или, возможно, «+»?

(Ради простоты давайте проигнорируем проблемы, которые могут возникнуть у меня при переопределении встроенных функций, таких как "+").

Ответы [ 2 ]

9 голосов
/ 16 июня 2010

Использование мульти-методов сопряжено с затратами на производительность, но если в этом нет крайней необходимости, вам следует продолжать использовать их, если они являются лучшей абстракцией. обеспечивает альтернативу с множественной методикой для определенных случаев использования и особенно подходит для случаев, когда ранее можно было использовать мульти-метод с диспетчеризацией на основе типа.

1 голос
/ 16 июня 2010

Поскольку Clojure может использовать произвольные функции отправки, дополнительная стоимость мультиметода - это стоимость функции отправки + поиск карты.

Или, как выразился cemerick:

(defmulti can-your-dispatch-do-that?
  (fn [& _]
    (if (= (phase-of-moon) :full)
      :do-this
      :do-that)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...