如何将我的defstruct保存并恢复到文件?

6 clojure

我想将数据保存到文件中,并在重新运行程序时恢复数据.

我已经定义了我的defstruct:

(defstruct bookmark:url:title:comments)

程序将简单地执行以下操作:
1.从url-db.txt加载defstruct
2.从传入*command-line-args*的导入文件中读取并添加到内部数据var.
3.重写url-db.txt文件.

示例导入文件:

www.cnn.com |新闻|这是CNN
www.msnbc.com |搜索|
news.ycombinator.com |新闻|科技新闻

Stu*_*rra 8

Tom Crayford的答案很接近,但使用"pr"函数而不是"print"."pr"产生的字符串可以通过"read"读回.

(defn save-db [db filename]
  (spit 
   filename 
   (with-out-str (pr db))))

(defn load-db [filename] 
  (with-in-str (slurp filename)
    (read)))
Run Code Online (Sandbox Code Playgroud)

请注意,如果*print-dup*设置为true,则不起作用.请参阅#176 票据另请注意,当您重新读入数据库时​​,记录将是普通地图,而不是结构地图.尚未使用pr/read序列化结构图.