2012-11-15 2 views
4

나는이 간단한 코드가 작동하지 않는 이유를 알아 내려고 지난 30 분 동안 벽에 머리를 두드 리고있었습니다. 적어도 하나의 명령 행 인수가 지정되었는지 확인하는 것입니다. 나는이 코드를 실행하면Clojure의 간단한 if-else 분기 논리

(defn check_args [] 
    (if (first *command-line-args*) 
     println "value is not nil" 
     println "value is nil")) 

(check_args) 

, 나는 말한다 런타임 예외로 끝날 :

java.lang.RuntimeException: Too many arguments to if 

을 나는 뭔가 간단 확신하지만 내 인생 내가 알아낼 수 없습니다 문제가있는 곳. 시퀀스의 첫 번째 항목을 가져 오는 코드는 시퀀스의 첫 번째 항목을 반환하고, 존재하지 않으면 nil을 반환하므로 매우 간단합니다.

답변

8

괄호를 잃어 버렸습니다. 일반적인 실수입니다.

은 많은 이해이

(defn check_args [] 
    (if (first *command-line-args*) 
     (println "value is not nil") 
     (println "value is nil"))) 
+1

감사를보십시오. 내가하고있는 일에 대해 나는 함수를 호출했기 때문에 괄호가 필요했다. 문자열을 그냥 돌려주고 싶다면 필요하지 않았을 것입니다. –

+0

do 문은 if 논리의 일부로 여러 함수 호출을 대괄호로 묶을 수 있기 때문에 무언가 사실이라면 do 함수를 사용하면 여러 가지 작업을 수행 할 수 있습니다. – octopusgrabbus