2012-01-12 65 views
1

我正在學習Clojure,並正在搞亂REPL。對於assert,該文件說,Clojure:'assert'的參數號錯誤?

Usage: (assert x) 
    (assert x message) 

Evaluates expr and throws an exception if it does not evaluate to 
logical true. 

所以我預計(assert false "Error message")引發錯誤和輸出"Error message"。然而,它給出了

java.lang.IllegalArgumentException: Wrong number of args (4) passed to: core$assert (NO_SOURCE_FILE:0) 

爲什麼說我有四個參數,什麼是正確的用法? assert的文檔不太詳細。

+2

在Clojure 1.3.0'(assert false false Error message)'在REPL中輸入會導致'AssertionError Assert failed:Error message'。我想我們需要更多的細節來幫助。 – Jan 2012-01-12 19:46:15

+0

謝謝。我有版本1.2.1,它給出了上面的輸出。好的,也許他們改變了行爲。 – 2012-01-12 19:56:46

+0

是的,Jan是正確的。行爲在版本1.2.1和1.3.0之間改變 - 添加了可選的消息參數。 – Scott 2012-01-12 20:02:26

回答

6

我剛剛在1.2.1上試了一下,我得到了和你一樣的行爲。

然後我在REPL上1.2.1試圖(doc assert)還有:

clojure.core/assert 
([x]) 
Macro 
    Evaluates expr and throws an exception if it does not evaluate to 
logical true. 

看來,在1.3中加入的消息,這樣你就可以用一個參數在1.2僅使用的版本。

如果您正在瀏覽在線文檔,請確保您正在閱讀正確的版本。每當有疑問,在REPL中輸入(doc the-function-or-macro-name),然後在那裏查看文檔。我使用doc比在線文檔更頻繁 - 它始終與我正在使用的版本保持一致,無論如何,它已經在我的手指下。

+0

我看到這是一個愚蠢的版本問題。正如Jan所說,我已經從1.4.0中獲得了快照。多謝你們。 – 2012-01-12 20:09:45