rs 是一个序列(列表),代表结果集中的所有记录。 rs 的每个元素都是一个表示单个记录的哈希映射,映射中的键/值对表示该记录的字段名称和值。您正在尝试执行与此等效的操作:
user> (let [rs [{:id 1 :val "foo"} {:id 2 :val "bar"}]]
(doseq [[k v] rs]
(println v)))
; Evaluation aborted.
; nth not supported on this type: PersistentArrayMap
这是试图将每个地图解构为[k v],大致相当于:
user> (let [k (nth {:id 1 :val "foo"} 0)
v (nth {:id 1 :val "foo"} 1)])
; Evaluation aborted.
; nth not supported on this type: PersistentArrayMap
如果您尝试打印每条记录中每个字段的值,您需要这样做:
user> (let [rs [{:id 1 :val "foo"} {:id 2 :val "bar"}]]
(doseq [record rs
[k v] record]
(println v)))
foo
1
bar
2
“对于结果集中的每条记录,对于该记录中的每个键/值,打印值。”
如果您的结果集仅包含一条记录(或者您只关心其中一条记录)并且您尝试遍历该单条记录的字段,则仅传递 doseq first:
user> (let [rs [{:id 1 :val "foo"}]]
(doseq [[k v] (first rs)]
(println v)))
foo
1
“对于结果集中第一条记录中的每个键/值,打印值。”