Clojure Can';在留言簿应用程序中无法从hashmap获取密钥
我正在玩luminus留言簿应用程序。 我在Clojure Can';在留言簿应用程序中无法从hashmap获取密钥,clojure,luminus,Clojure,Luminus,我正在玩luminus留言簿应用程序。 我在g.test.db.core.clj中添加了一些日志语句来查看数据结构的键。请看下面的“预期关键点”和“实际关键点” 发生了什么事?为什么我不能从数据库返回的数据结构中打印密钥?看起来实际值是一个列表,而不是一个映射。请尝试(>actual first keys pprint)看起来actual是一个列表,而不是一个地图。请尝试(>actual first keys pprint)是否确实要说(>(db/get messages{}{:connecti
g.test.db.core.clj
中添加了一些日志语句来查看数据结构的键。请看下面的“预期关键点”和“实际关键点”
发生了什么事?为什么我不能从数据库返回的数据结构中打印密钥?看起来实际值是一个列表,而不是一个映射。请尝试
(>actual first keys pprint)
看起来actual是一个列表,而不是一个地图。请尝试(>actual first keys pprint)
是否确实要说(>(db/get messages{}{:connection t-conn}))
?这似乎是一个错误的类型,因为我想不出另外一个原因,你会将thread宏与一个表达式一起使用。添加堆栈跟踪。@Josh我不能回答这个问题。当我克隆repo时,它就在那里。@FrankHenard这是我得到的堆栈跟踪:“空堆栈跟踪为null”,见上文。你真的想说(>(db/get messages{}{:connection t-conn}))
?这似乎是一个错误的类型,因为我想不出另外一个原因,你会将thread宏与一个表达式一起使用。添加堆栈跟踪。@Josh我不能回答这个问题。当我克隆repo时,它就在那里。@FrankHenard这是我得到的堆栈跟踪:“空堆栈跟踪时为空”。见上文。这完全正确。你怎么知道的?你能从日志中分辨出来吗?还是你必须克隆这个项目并尝试一下?很高兴它成功了!我在你的(pprint-actual)的结果中看到了地图前面打开的paren(
)
。我在Clojure中也做过一些db工作,所以我以前可能遇到过这个问题。这是完全正确的。你是如何解决的?你能从日志中分辨出来吗?还是你必须克隆项目并尝试一下?很高兴它成功了!我看到了打开的paren(
在你的结果的地图前面)(pprint-actual)
。我在Clojure中也做过一些数据库工作,所以我以前可能遇到过这个问题。
(deftest test-messages
(jdbc/with-db-transaction [t-conn db/conn]
(jdbc/db-set-rollback-only! t-conn)
(let [timestamp (java.util.Date.)]
(is (= 1 (db/save-message!
{:name "Bobby"
:message "Hello World!"
:timestamp timestamp}
{:connection t-conn})))
(let [actual (-> (db/get-messages {} {:connection t-conn}))
expected {:name "Bobby"
:message "Hello World!"
:timestamp timestamp}]
(log/info "Expected Keys")
(pprint (keys expected))
(log/info "Actual Keys")
(pprint (keys actual)) ;;<--this is the problem
(is (= actual
expected))))))
({:id 35,
:name "Bobby",
:message "Hello World!",
:timestamp #inst "2017-03-04T04:31:01.030000000-00:00"})