OnR*_*lve 4 clojure filter sqlkorma
我遇到一个问题,将一些表格串联在一起,从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 的"children"来过滤此结果集.
我的尝试:
;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)))
Run Code Online (Sandbox Code Playgroud)
我在这里期待的是一个哈希图矢量:a设置为1,即:
[{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4}]
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
IllegalArgumentException Don't know how to create ISeq from: xxx.core$eval3145$fn__3146 clojure.lang.RT.seqFrom (RT.java:505)
Run Code Online (Sandbox Code Playgroud)
从错误我收集它试图从函数创建序列...虽然只是无法连接点为什么.
此外,如果我通过执行以下操作完全分离过滤器功能:
(let [children (-> data first :children)]
(filter #(= (% :a) 1) children))
Run Code Online (Sandbox Code Playgroud)
有用.我不确定为什么第一个线程不应用过滤器函数,将:children向量作为coll参数传递.
任何和所有帮助非常感谢.
谢谢
你想要thread-last宏:
(->> data first :children (filter #(= (% :a) 1)))
Run Code Online (Sandbox Code Playgroud)
产量
({:a 1,:b 2,:c 3} {:a 1,:b 3,:c 4})
thread-first原始代码中的宏等同于编写:
(filter (:children (first data)) #(= (% :a) 1))
Run Code Online (Sandbox Code Playgroud)
这会导致错误,因为您的匿名函数不是序列.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |