У меня возникла проблема, связанная с некоторыми формами, чтобы сделать некоторый ETL в результирующем наборе из функции korma.clojure first-thread with filter function
я вернусь из Корме 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)))
Что я ожидал здесь вектор HashMaps, что: установлен в 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.
Любая помощь очень ценится.
Благодаря