Каков хит производительности использования много методов? Если у меня есть 2 функции с тем же именем и тем же количеством аргументов, которые отличаются только типом (список по сравнению с интервалом), моя производительность собирается пострадать очень?
Другими словами, это это лучше для именования моей функции добавления вектора: "добавлять-вектор" или отпуск это, как "добавляют" или возможно "+"?
(Ради простоты позволяют нам проигнорировать проблемы, у меня могут быть встроенные функции переопределения как "+").
Использование мультиметодов сопряжено с издержками производительности, но если нет крайней необходимости, вы должны продолжать использовать их, если они являются лучшей абстракцией.
Тем не менее, протоколы в Clojure 1.2 обеспечивают "родную" скоростную альтернативу мультиметодам для некоторых случаев использования, и особенно подходят для случаев, когда раньше можно было использовать мультиметод с диспетчеризацией на основе типов.
Так как Clojure может использовать произвольные диспетчерские функции, дополнительные затраты на мультиметод - это стоимость диспетчерской функции + поиск по карте.
Или, как выразился cemerick:
(defmulti can-your-dispatch-do-that?
(fn [& _]
(if (= (phase-of-moon) :full)
:do-this
:do-that)))