Pergunta

Eu tenho algumas estruturas com seqüências preguiçosos aninhados que lêem a partir de arquivos. Quando eu estou testando eu gostaria de ser capaz de envolvê-los em uma versão recursiva de DOALL para garantir que todos os dados são puxados a partir dos arquivos antes os arquivos são fechados.

Foi útil?

Solução

(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))))

Output:

(("This is test2.txt" "") ("This is test1.txt" ""))

Outras dicas

(defn doall* [s] (dorun (tree-seq seq? seq s)) s)

Isso funcionou para mim em um teste de unidade

(use 'clojure.walk)
(postwalk identity nested-lazy-thing)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top