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"))))

Здесь я хочу напечатать false в теле в соответствии со значением функции isIdExist (которая возвращает true, если электронная почта уже существует, иначе false) теперь, когда я запускаю это, если isIdExist == true, то он печатает false, но когда isIdExist == false он добавляет значение в хранилище данных, но дает это ошибка. Может кто-нибудь помочь, почему это происходит и какую концепцию clojure мне здесь не хватает? Спасибо


person divya nagar    schedule 22.11.2016    source источник


Ответы (2)


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

(if (db/isIdExist "users" "email" email) 
  "false"
  (do
    (db/addUser email phone roleId status) 
    "true"))))
person Lee    schedule 22.11.2016

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

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

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

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

((db/addUser email phone roleId status) (str "true"))))
person Arthur Ulfeldt    schedule 22.11.2016