如何使用clojure.edn/read来获取文件中的一系列对象?

ToB*_*ced 10 clojure edn

引入了Clojure 1.5 clojure.edn,其中包括一个需要a的读取功能PushbackReader.

如果我想阅读前五个对象,我可以这样做:

(with-open [infile (java.io.PushbackReader. (clojure.java.io/reader "foo.txt"))]
  (binding [*in* infile]
    (let [edn-seq (repeatedly clojure.edn/read)]
      (dorun (take 5 (map println edn-seq))))))
Run Code Online (Sandbox Code Playgroud)

我怎样才能打印出所有对象?考虑到其中一些可能是nils,似乎我需要检查EOF或类似的东西.我希望有一系列类似于我得到的对象line-seq.

Hen*_*gon 15

使用:eof键

http://clojure.github.com/clojure/clojure.edn-api.html

opts是一个可以包含以下键的映射:: eof - 在文件结尾返回的值.如果没有提供,eof会抛出异常.

编辑:抱歉,这还不够详细!在这里y'go:

(with-open [in (java.io.PushbackReader. (clojure.java.io/reader "foo.txt"))]
  (let [edn-seq (repeatedly (partial edn/read {:eof :theend} in))]
    (dorun (map println (take-while (partial not= :theend) edn-seq)))))
Run Code Online (Sandbox Code Playgroud)

应该这样做