#clojure
#clojure
Вопрос:
Я хотел бы предоставить некоторые методы для протокола clojure, начинающиеся с символа :. Есть ли какой-либо способ переопределить это в Clojure?
Ответ №1:
Я так не думаю. Ключевые слова Clojure реализованы в reader, и я не думаю, что есть какой-либо способ переопределить это поведение.
Когда вы используете ключевое слово в качестве функции, это эквивалентно (get arg :ключевое слово). Вы можете расширить то, что это делает, внедрив ILookup в свой протокол.
Joost.
Ответ №2:
Звучит как плохая идея: двоеточия зарезервированы для ключевых слов, поэтому, даже если бы вы могли это сделать, я думаю, это привело бы к некоторому запутыванию кода.
Вы, конечно, можете поместить функцию внутри записи, сопоставленной с ключевым словом:
(defrecord Foo [])
(def foo (Foo. nil {:method (fn [a b] (* a b))}))
((:method foo) 7 10)
=> 70
Иногда я обнаружил, что это полезный трюк……