В ближайшем будущем, как мне требуется мультиметод? - PullRequest
4 голосов
/ 20 апреля 2011

Я знаю, что могу сделать (:use function), но как мне сделать это для мультиметода?

1 Ответ

7 голосов
/ 20 апреля 2011

Мультиметоды используются из других пространств имен так же, как функции.

Если у вас есть следующее в com / example / foo.clj

(ns com.example.foo)

(defn f [x]
  (* x x))

(defmulti m first)

(defmethod m :a [coll]
  (map inc (rest coll)))

В файле com / example/bar.clj вы можете использовать f и m одинаково:

(ns com.example.bar
  (:use [com.example.foo :only [f m]]))

(defn g []
  (println (f 5)) ; Call the function
  (println (m [:a 1 2 3]))) ; Call the multimethod

;; You can also define new cases for the multimethod defined in foo
;; which are then available everywhere m is
(defmethod m :b [coll]
  (map dec (rest coll)))

Надеюсь, это ответит на ваш вопрос!

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