在Clojure特殊表单(http://clojure.org/special_forms)的文档中,:pre
和:post
的示例如下所示:
(defn constrained-sqr [x]
{:pre [(pos? x)]
:post [(> % 16), (< % 225)]}
(* x x))
Clojure如何判断包含元数据的地图是否不是函数的定义?元数据不应该在params向量之前吗?根据{{1}}(http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/defn)的文档,语法为
defn
使用(defn name doc-string? attr-map? [params*] body)
之前参数向量。这不是更正确的:
attr-map?
我应该提交错误报告还是我误读了这个?
很抱歉选择尼特。
答案 0 :(得分:5)
地图必须遵循参数向量,因为它取决于参数。并且您可以拥有多个具有不同arities的函数体。 disambiguation非常简单:地图是身体中唯一的东西,它是返回值。如果其后还有其他内容,那么地图就会被丢弃。然后将其添加到元数据中。这是一个非常直接且非常简单的启发式方法,不应该与任何生产代码冲突。