2012-01-12 3 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. 

그래서 나는 오류 및 출력 "Error message" 인상 (assert false "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 "오류 메시지")'가 REPL에 입력되면'AssertionError Assert failed : Error message'가 발생합니다. 도움이 될만한 자세한 내용이 필요합니다. – Jan

+0

감사합니다. 나는 버전 1.2.1을 가지고 있으며 위의 출력을 정확하게 제공합니다. 좋아, 어쩌면 그들은 행동을 바꿨을거야. –

+0

예, 1 월이 맞습니다. 1.2.1 버전과 1.3.0 버전 사이에서 동작이 변경되었습니다. 선택적 메시지 인수가 추가되었습니다. – Scott

답변

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.2에서 하나 개의 매개 변수를 사용하여 버전을 사용할 수 있습니다 1.3에 추가 된 것으로 보인다.

온라인 설명서를 검색하는 경우 올바른 버전을 읽고 있는지 확인하십시오. 의심 할 때마다 REPL에 (doc the-function-or-macro-name)을 입력하고 바로 설명서를 참조하십시오. 나는을 온라인 문서보다 훨씬 더 자주 사용합니다. 사용하고있는 버전이 항상 최신이며, 어쨌든 내 손가락 아래에 이미 있습니다.

+0

어리석은 버전 문제였습니다. 저는 1.4.0에서 스냅 샷을 찍었고 Jan이 말한 것처럼 작동합니다. 고마워. –