使用Clojure的read/read-string函数,如何将.clj文件读取为对象列表?

3
正如标题所述,如果我执行

(read-string (slurp "somefile"))

这样只会返回文件中的第一个对象,也就是说如果“somefile”文件内容如下:

(a obj) (b obj)

那么我只能得到一个对象(a obj)作为结果。

我该如何获取所有对象的列表,就像这样?

((a obj) (b obj))

感谢您的选择。
2个回答

10
(defn read-all
  [input]
  (let [eof (Object.)]
    (take-while #(not= % eof) (repeatedly #(read input false eof)))))

5

我通常会把东西包装成列表,

(read-string (str \( (slurp "somefile")  \)))

3
是的,我最终也采用了这种方式。请注意在)前添加\n,如果最后一行是注释,这样可以将你从注释中退出。 - andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接