2016-11-22 10 views
0

Я пытаюсь добавить некоторые данные в хранилище данных приложения. Это моя функция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 функции (которая возвращает истину, если адрес электронной почты уже существует еще ложь) теперь, когда я запускаю это, если isIdExist == true то он печатает ложь, но когда isIdExist == false добавляет значение в хранилище данных, но дает эту ошибку. Может кто-то, пожалуйста, помогите, почему это происходит, и какую концепцию clojure мне не хватает здесь? Спасибо

ответ

5

Я предполагаю, что db/addUser возвращает строку, в этом случае вы пытаетесь вызвать возвращаемое значение как функцию. Похоже, что вы хотите, чтобы выполнить то вставка вернуть «истина», так что вы можете использовать do секвенировать два:

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

Большое вам спасибо @ Это работает. :) –

4

В Clojure ))))))) это совершенно нормально, и вы не видите его повсюду, нет повода для беспокойства.

С другой стороны, (( должен выделяться и ловить глаз. Это очень часто означает:

  • кто-то возвращает функцию.
  • Эта функция должна быть немедленно запущена.

Этот шаблон не является чем-то неправильным, просто научиться определять его, это полезный способ быстро привыкнуть к чтению кода Clojure. В этом случае это, вероятно, означает, что слишком много отверстий ( s в

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

 Смежные вопросы

  • Нет связанных вопросов^_^