使用clojure读/读字符串函数,我如何在.clj文件中读取对象列表

and*_*ndy 3 clojure s-expression

标题是,如果我这样做

(read-string (slurp "somefile"))
Run Code Online (Sandbox Code Playgroud)

这只会给我文件中的第一个对象,这意味着"somefile"如下所示:

(a obj) (b obj)
Run Code Online (Sandbox Code Playgroud)

然后我只得到(一个obj)作为结果.

我如何得到所有对象的列表,像这样?

((a obj) (b obj))
Run Code Online (Sandbox Code Playgroud)

谢谢.

kot*_*rak 10

(defn read-all
  [input]
  (let [eof (Object.)]
    (take-while #(not= % eof) (repeatedly #(read input false eof)))))
Run Code Online (Sandbox Code Playgroud)


Ham*_*aya 5

我通常把东西包在一个列表中,

(read-string (str \( (slurp "somefile")  \)))
Run Code Online (Sandbox Code Playgroud)

  • 呀,我最终也这样做,请注意在\)之前添加一个\n,如果最后一行是注释,这将让你离开它. (3认同)