Как создать несколько реализаций мультиметода для одного типа данных?Возможно ли предусмотреть несколько различных реализаций многомерного метода для одного и того же типа?
Это не может быть отличным примером, но я надеюсь, что это иллюстрирует мысль: быть в состоянии обработать вложенные векторы как в последовательности:
repl> (def thing [[[1] []] [27] [18 [32 35]]])
repl> (fmap count thing)
[2 1 2]
и как деревья:
repl> (fmap (partial + 1) thing)
[[[2] []] [28] [19 [33 36]]]
Что такое общий способ создания и использования нескольких реализаций нескольких меток для одного и того же типа?
Я не думаю, что здесь используются многометоды - 'defmethod' заменяет любой предыдущий метод, определенный для этого значения отправки, с новым. – Alex
Если функции выполняют две совершенно разные вещи, почему бы просто не объявить две разные функции/мультиметоды? – DaoWen
Мультиметоды являются полиморфными во всем, а не только по типу (хотя это наиболее распространено). Таким образом, если у вас есть способ различать объекты одного типа, которые вы хотите обрабатывать одним способом, и объекты того же типа, которые вы хотите обработать другим, это нормально. –