Clojure属性映射中的歧义

Ral*_*lph 3 clojure

在Clojure的特殊形式的文档(http://clojure.org/special_forms)的例子:pre:post看起来像这样:

(defn constrained-sqr [x]
    {:pre  [(pos? x)]
     :post [(> % 16), (< % 225)]}
    (* x x))
Run Code Online (Sandbox Code Playgroud)

Clojure如何判断包含元数据的地图是否不是函数的定义?元数据不应该在params向量之前吗?根据defn(http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/defn)的文档,语法是

(defn name doc-string? attr-map? [params*] body)
Run Code Online (Sandbox Code Playgroud)

与params矢量attr-map? 之前.这不是更正确的:

(defn constrained-sqr
    {:pre  [(pos? x)]
     :post [(> % 16), (< % 225)]}
    [x]
    (* x x))
Run Code Online (Sandbox Code Playgroud)

我应该提交错误报告还是我误读了这个?

抱歉,选择尼特.

kot*_*rak 5

地图必须遵循参数向量,因为它取决于参数.并且您可以拥有多个具有不同arities的函数体.该消歧很简单:就是地图体内唯一,它的返回值.如果其后还有其他内容,那么地图就会被丢弃.然后将其添加到元数据中.这是一个非常直接且非常简单的启发式算法,不应该与任何生产代码冲突.