多方法的一般语法

时间:2012-03-31 22:22:08

标签: clojure clojurescript multimethod

如果问题很简单,我道歉,但是一些谷歌搜索并没有引导我到任何地方。 defmultidefmethod的一般语法是什么?我可以编写简单的多方法,但我不确定在哪里可以放置文档字符串,前置和后置条件,元数据等。

我实际上对ClojureScript比对Clojure更感兴趣,所以如果两者之间存在差异,请告诉我。

2 个答案:

答案 0 :(得分:7)

在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

答案 1 :(得分:4)

Clojuredocsdefmultidefmethod

如果您没有找到足够详细的示例,您可以考虑添加自己的示例(一旦您回答了所有问题)。