3
在爲Clojure的特殊形式的文檔(http://clojure.org/special_forms)爲:pre
的例子,:post
看起來是這樣的:歧義Clojure的屬性圖
(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?
前PARAMS矢量。這是不是更正確的:
(defn constrained-sqr
{:pre [(pos? x)]
:post [(> % 16), (< % 225)]}
[x]
(* x x))
我應該提交一個錯誤報告或我誤解了這?
對不起,選擇尼特。
'defn'的文檔有錯嗎? – Ralph 2010-10-22 12:05:47
@Ralph:沒有。 'defn'文檔討論了函數的元數據(實際上:包含該函數的Var)。條件轉到參數向量的元數據,而不是函數的元數據。正如我所說:條件取決於論據。將它們附加到函數本身沒有任何意義。 – kotarak 2010-10-22 12:22:25
啊!我現在明白了。 ':pre'和':post'是'x'的值的前置和後置條件。當然,他們必須遵循。 – Ralph 2010-10-22 12:38:28