2016-11-22 80 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功能(如电子邮件已经存在,否则返回false返回true)的值在体内打印假的现在,当我运行此,如果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")))) 
相关问题