gpt4 book ai didi

java - Clojure 中的 NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:47 26 4
gpt4 key购买 nike

我的 Clojure 技能不存在,我的 SQLite 技能也是如此。由于某种原因,我在工作中被这个项目困住了,但我玩得很开心。

基本上,用户提交一个表单,然后将其发送到 PayPal,我们将其取回,然后我们更新他们购买了商品的数据库。此外,我们还从用于其购物车的数据库中删除临时 session 。

我的工作是将他们购买的商品数量添加到数据库中。这是我下面的used_quantity。在 PHP/MySQL 中我会做类似的事情:

update sa_forms set used_quantity = used_quantity + {quantity} where id = {id} LIMIT 1

但似乎我实际上必须执行两个步骤才能添加数量。

我添加的唯一内容是 let 语句。没有它,整个事情就可以正常进行。有了它,它就会崩溃。

insert-db-order (if (:login session)
(doseq [order db-orders]
(j/insert! SQLDB :sa_orders
{:form_id (:form_id order)
:user_id (:user_id order)
:form_name (:form_name order)
:user_name username
:total_cost_paid (* (:payment_amt order) (:quantity order))
:date_completed (.getTime (java.util.Date.))
:order_content (:html order)
:created_at (.getTime (java.util.Date.))
:updated_at (.getTime (java.util.Date.))
:status false
:quantity (:quantity order)})
(let [quantityOf (j/query SQLDB ["SELECT used_quantity FROM sa_forms WHERE id = ? LIMIT 1" (:form_id order)])]
(j/update! SQLDB :sa_forms
{:used_quantity (+ (:used_quantity quantityOf) (:quantity order))}
(sql/where {:id (:form_id order)}))
)
)
(doseq [id (keys session-orders)]
(j/insert! SQLDB :sa_orders
{:form_id (:form_id (id session-orders))
:user_id anonymous-key
:form_name (:form_name (id session-orders))
:user_name username
:total_cost_paid (* (:payment_amt (id session-orders)) (:quantity (id session-orders)))
:date_completed (.getTime (java.util.Date.))
:order_content (:html (id session-orders))
:created_at (.getTime (java.util.Date.))
:updated_at (.getTime (java.util.Date.))
:status false
:quantity (:quantity (id session-orders))}))
)

我一整天都遇到错误,并且尝试了多种方法。例如:

{:used_quantity (+ (int(:used_quantity quantityOf)) (:quantity order))}

因为它说 map 不能是数字。我试过了

{:used_quantity (+ (quantityOf) (:quantity order))}

因为我只选择一个值,所以不需要显示我所引用的内容。我还尝试pprint值、或键或全部,但它们要么显示为nil,要么什么也没有,这没有帮助。

在这次考验中,我了解到我必须将变量定义器放在 let 语句中,但除其他外,我已经在这上面花了 9 个半小时,并且我已经从一个错误转向了另一个错误。

有人可以给我一些 clojure 吗?通俗地说最好。我仍在努力掌握这种语言的行话和奇怪的语法......

谢谢!

最佳答案

首先,请检查您在出现异常的上下文中使用的值的类型。

user> (type '({:quantity 1}))
clojure.lang.PersistentList
user> (type {:quantity 1})
clojure.lang.PersistentArrayMap

sql/query 应该返回顺序数据类型,即使您将限制设置为 1。用作以 seq 作为参数的函数的关键字将给出 nil 结果:

user> (:quantity '({:quantity 1}))
nil

用括号括起来,正如您也尝试过的那样,也肯定是一个错误

user> ('({:quantity 1}))
ClassCastException clojure.lang.PersistentList cannot be cast to clojure.lang.IFn user/eval8554/fn--8555 (form-init7057475948894346608.clj:1)

获得结果的方式应该更像这样:

user> (+ (:quantity (first '({:quantity 1}))) 2)
3

关于java - Clojure 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26812487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com