2016-11-22 18 views
0

일부 데이터를 앱 엔진 데이터 저장소에 추가하려고합니다. 이것은 내가 (이메일이 이미 그렇지 않은 경우는 false 존재하는 경우 true를 반환) isIdExist 함수의 값에 따라 몸에 거짓 인쇄 할 다음java.lang.String을 clojure.lang.IFn으로 캐스팅 할 수 없습니다.

(defn createUser [email phone roleId status] 
    (println (db/isIdExist "users" "email" email)) 
    (if (db/isIdExist "users" "email" email) 
    (str "false") 
    ((db/addUser email phone roleId status) (str "true")))) 

내 기능입니다 나는이 프로그램을 실행할 때 지금, isIdExist == true 다음 false를 인쇄하는 경우 만 isIdExist == false 데이터 저장소에 값을 추가 할 때이 오류가 발생합니다. 누군가가 왜 일어나는 지 도와 주실 수 있습니까? 그리고 제가 clojure의 개념은 무엇입니까? 감사합니다

답변

5

db/addUser는 반환 값을 함수로 호출하려는 경우 문자열을 반환한다고 가정합니다. 당신은 당신이 시퀀스 do을 사용할 수 있도록 삽입 후 "true"를 반환 수행 할 것 같습니다 두 : Clojure의 )))))))에서

(if (db/isIdExist "users" "email" email) 
    "false" 
    (do 
    (db/addUser email phone roleId status) 
    "true")))) 
+0

너무 많이 보내 주셔서 감사합니다. :) –

4

완전히 정상이며, 사방 우려에 대한 원인을 볼 수 없습니다.

반면에 ((은 눈에 띄어 야합니다. 매우 자주 의미 :

  • 누군가가 함수를 반환하고 있습니다.
  • 해당 기능을 즉시 실행해야합니다.

이 패턴은 어떤 방식 으로든 잘못되지 않았으며,이 패턴은 Clojure 코드를 빨리 읽는 데 익숙해지는 유용한 방법임을 알게되었습니다. 이 경우에는 너무 많음을 의미합니다 (

((db/addUser email phone roleId status) (str "true"))))