java.lang.String无法强制转换为clojure.lang.IFn

时间:2016-11-22 23:24:08

标签: clojure clojurescript compojure clojure-java-interop

我正在尝试将一些数据添加到应用引擎数据存储区中。这是我的功能

(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函数的值在body中打印false(如果电子邮件已经存在则返回true,否则为false)现在当我运行它时,如果isIdExist == true则打印为false但是当isIdExist == false它在数据存储区中添加值但会出现此错误时。有人可以帮助为什么会发生这种情况,我在这里错过了什么概念?感谢

2 个答案:

答案 0 :(得分:5)

我假设db/addUser返回一个字符串,在这种情况下,您尝试将返回值作为函数调用。看起来你想要执行插入然后返回" true"所以你可以使用do对两者进行排序:

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

答案 1 :(得分:4)

在Clojure中)))))))是完全正常的,你可以在任何地方看到它,无需担心。

另一方面,((应该脱颖而出并引起你的注意。它通常意味着:

  • 有人正在返回一个功能。
  • 该功能应立即运行。

这种模式没有任何错误,只是学会发现它是一种习惯于快速阅读Clojure代码的有用方法。在这种情况下,它可能意味着

中的开放(太多了
((db/addUser email phone roleId status) (str "true"))))