【发布时间】:2015-08-10 07:53:48
【问题描述】:
我在将一些表单串在一起以对来自 korma 函数的结果集执行一些 ETL 时遇到问题。
我从 korma sql 回来了:
({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"})
我希望通过获取 :a 关键字为 1 的“孩子”来过滤此结果集。
我的尝试:
;mock of korma result
(def data '({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"}))
(-> data
first
:children
(filter #(= (% :a) 1)))
我在这里期待的是一个 :a 设置为 1 的哈希图向量,即:
[{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4}]
但是,我收到以下错误:
IllegalArgumentException Don't know how to create ISeq from: xxx.core$eval3145$fn__3146 clojure.lang.RT.seqFrom (RT.java:505)
从我收集到的错误中,它正在尝试从一个函数创建一个序列......尽管只是无法将这些点连接起来以了解原因。
此外,如果我通过执行以下操作完全分离过滤器功能:
(let [children (-> data first :children)]
(filter #(= (% :a) 1) children))
它有效。我不确定为什么第一个线程没有应用过滤器函数,而是将 :children 向量作为 coll 参数传入。
非常感谢任何和所有帮助。
谢谢
【问题讨论】: