代码之家  ›  专栏  ›  技术社区  ›  Ralph java.is.for.desktop

Clojure属性映射中的模糊性

  •  3
  • Ralph java.is.for.desktop  · 技术社区  · 14 年前

    在Clojure特殊表单的文档中( http://clojure.org/special_forms )例如 :pre :post 看起来像这样:

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

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

    (defn name doc-string? attr-map? [params*] body)
    

    attr-map? 之前 参数向量。这不是更正确吗:

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

    很抱歉挑刺。

    1 回复  |  直到 7 年前
        1
  •  5
  •   kotarak    14 年前

    映射必须跟随参数向量,因为它依赖于参数。你可以有多个不同的函数体。这个 disambiguation 很简单:映射是主体中唯一的东西,它是返回值。如果后面还有什么东西,地图就会被扔掉。然后将其添加到元数据中。这是一个非常直接和非常简单的启发式方法,不应该与任何生产代码冲突。