Общий синтаксис мультиметодов - PullRequest
7 голосов
/ 01 апреля 2012

Я прошу прощения, если вопрос тривиален, но какое-то прибегание к поиску нигде не ведет меня. Каков общий синтаксис defmulti и defmethod? Я могу написать простые мультиметоды, но я не уверен, куда я могу поместить строку документации, условия до и после, метаданные и т. Д.

Я на самом деле интересуюсь ClojureScript больше, чем Clojure, поэтому, если между ними есть различия, скажите, пожалуйста.

Ответы [ 2 ]

7 голосов
/ 01 апреля 2012

В REPL вы можете использовать функцию doc для получения аргументов функции и (в большинстве случаев) объяснения опций. Что касается ClojureScript, эти две функции являются макросами, что означает, что они раскрываются во время компиляции и должны вести себя точно так же, как в обычном Clojure. То есть, пока ClojureScript может обрабатывать код, который генерирует макрос.

user=> (doc defmulti)
-------------------------
clojure.core/defmulti
([name docstring? attr-map? dispatch-fn & options])
Macro
  Creates a new multimethod with the associated dispatch function.
  The docstring and attribute-map are optional.

  Options are key-value pairs and may be one of:
    :default    the default dispatch value, defaults to :default
    :hierarchy  the isa? hierarchy to use for dispatching
                defaults to the global hierarchy
nil
user=> (doc defmethod)
-------------------------
clojure.core/defmethod
([multifn dispatch-val & fn-tail])
Macro
  Creates and installs a new method of multimethod associated with dispatch-value. 
nil
4 голосов
/ 01 апреля 2012

В Clojuredocs : defmulti , defmethod .

Если вы не найдете там достаточно подробных примеров, попробуйте добавить свои (как только вы ответите на все вопросы).

...