рекурсивный (doall) в Clojure
-
07-07-2019 - |
Вопрос
У меня есть несколько структур с вложенными ленивыми последовательностями, которые читают из файлов.Когда я тестирую, я хотел бы иметь возможность обернуть их рекурсивной версией doall, чтобы убедиться, что все данные извлекаются из файлов. до файлы закрываются.
Решение
(defn doall-recur [s]
(if (seq? s)
(doall (map doall-recur
s))
s))
(use 'clojure.contrib.duck-streams)
(with-open [r1 (reader "test1.txt")
r2 (reader "test2.txt")]
(doall-recur (list (line-seq r2) (line-seq r1))))
Выход:
(("This is test2.txt" "") ("This is test1.txt" ""))
Другие советы
(defn doall* [s] (dorun (tree-seq seq? seq s)) s)
Это сработало для меня в модульном тесте
(use 'clojure.walk)
(postwalk identity nested-lazy-thing)
Не связан с StackOverflow