Можно ли определить протокол Clojure с методами, начинающимися с ":"? - PullRequest
2 голосов
/ 12 апреля 2011

Я хотел бы предоставить несколько методов для протокола clojure, начиная с символа:.Есть ли способ переопределить это в Clojure?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

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

Конечно, вы можете поместить функцию в запись, сопоставленную с ключевым словом:

(defrecord Foo [])

(def foo (Foo. nil {:method (fn [a b] (* a b))}))

((:method foo) 7 10)
=> 70

Иногда я обнаружил, что это полезный трюк ......

3 голосов
/ 12 апреля 2011

Не думай так. Ключевые слова Clojure реализованы в читателе, и я не думаю, что есть какой-либо способ переопределить это поведение.

Когда вы используете ключевое слово в качестве функции, это эквивалентно (get arg: keyword). Вы можете расширить то, что это делает, внедрив ILookup в свой протокол.

Joost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...