2016-11-22 130 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")))) 
相關問題