[英]Class cast exception in clojure
獲取clojure.core$count cannot be cast to java.lang.Number
error for defined variable count
(defroutes jobs-routes
(context "/jobs" []
(POST "/jobValidation" [name status req] (insert-job jobName jobStatus req)))
在這種方法中,我定義了一個變量count
來存儲查詢中的總計數值
(defn insert-job [jobName jobStatus req]
(let [count (db/insert-job {:job-name name :status status})])
(when (> count 0) (println (format "true" )))
(insert-job req) ;
)
查詢:數據庫/插入作業
-- :name insert-jobWithValidation :? :*
SELECT count(*) FROM job_history WHERE job_name = :job-name and status = :status
問題我想檢查是否如果我得到的值大於 0,那么我可以打印任何東西,如果計數是任何正值,那么我可以執行一些新的事情
你的let
塊沒有主體,你在定義向量之后立即關閉它:
(let [count (db/insert-job {:job-name name:status status})])
請注意,您在這里隱藏了核心 function count
。
所以當你調用這一行: (when (> count 0) (println (format "true" )))
時, count
的值為count
function:
count
=> #object[clojure.core$count 0x69c6a700 "clojure.core$count@69c6a700"]
(> count 0)
Execution error (ClassCastException)
class clojure.core$count cannot be cast to class java.lang.Number
還有一些其他錯誤和樣式不准確:
jobName jobStatus
vs name status
)(insert-job req)
,但是這個 function 有三個(>... 0)
是pos?
(format "true")
就是"true"
可能的修復(也許你仍然需要以某種方式修改它):
(defn insert-job [job-name job-status req]
(let [my-count (db/insert-job {:job-name job-name :status job-status})]
(if (pos? my-count)
(println "true")
(insert-job job-name job-status req))))
這可能是因為您的hugsql
查詢 header:
:? :*
:? :*
- 返回行集,它不是數字。 也許:? :1
:? :1
在這里會更合適。 無論如何,查詢不返回count(*)
,而是返回一個哈希映射(如果是:1)或一個 hashmap 的列表(如果是:*),您仍然需要檢索該值從那里。
類似的東西(未經測試):
-- :name insert-jobWithValidation :? :1
SELECT count(*) as amount FROM job_history WHERE job_name = :job-name and status = :status
(defn insert-job [name status req]
(let [res (db/insert-job {:job-name name :status status})]
(when (-> res :amount pos?)
(println true))
(insert-job req)))
UPD :我的天啊,確實沒有身體,@MartinPůda,謝謝)
我會說,你想要的是這樣的:
-- :name count-jobs-by-name-and-status :? :1
SELECT count(*) as amount FROM job_history WHERE job_name = :job-name and status = :status
(defn insert-job-if-not-exists [name status req]
(if (->> {:job-name name :status status}
db/count-jobs-by-name-and-status
:amount
pos?)
(println "job already exists")
(insert-job req)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.