Могу ли я использовать мультиметоды Clojure только для классов Java?
Я немного озадачен тем, могу ли я использовать мультиметоды clojure только на структурах clojure, представленных Java-классами, или я могу основывать мультиметоды для диспетчеризации на структурах или других свойствах?
3 ответа
Очень распространено создание мультиметодов, которые отправляют в класс первого или единственного аргумента. В этом случае "класс" может быть классом Java, записью (defrecord создает класс Java) или даже внутренним типом Clojure, таким как ISeq.
Вы также можете отправить произвольную функцию из аргументов, переданных этой функции. Например, вы можете вычислить функцию и отправить ключевое слово, если хотите.
Вы можете отправить мультиметоды для произвольной функции аргументов (эта функция передается в качестве второго аргумента defmulti
, http://clojure.org/multimethods предоставляет более подробную информацию.
Вы можете настроить отправку мультиметодов на любую функцию по вашему выбору.