目前我正在研究一种在会话中使用哈希表的elisp主模式。因此,每次初始化主模式时,表都会加载到内存中。在会话期间和会话结束时,它们将被写入文件。我当前的实现以下列方式写入数据:
(with-temp-buffer
(prin1 hash-table (current-buffer))
(write-file ("path/to/file.el"))))
在会话开始时加载数据是通过读取完成的,如下所示:
(setq name-of-table (car
(read-from-string
(with-temp-buffer
(insert-file-contents path-of-file)
(buffer-substring-no-properties
(point-min)
(point-max))))))))
它有效,但我觉得这不是最美妙的方式。我的目标是:我希望这个主要模式变成一个漂亮的干净包,将它自己的数据存储在存储包的其他数据的文件夹中。
答案 0 :(得分:3)
这是我实施的方式
写入文件:
(defun my-write (file data)
(with-temp-file file
(prin1 data (current-buffer))))
从文件中读取:
(defun my-read (file symbol)
(when (boundp symbol)
(with-temp-buffer
(insert-file-contents file)
(goto-char (point-min))
(set symbol (read (current-buffer))))))
致电:
(my-write "~/test.txt" emacs-version)
致电阅读
(my-read "~/test.txt" 'my-emacs-version)
答案 1 :(得分:2)
我想出了以下解决方案,灵感来自第一个答案:
(with-temp-buffer
(insert "(setq hash-table ")
(prin1 hash-table (current-buffer)
(insert ")")
(write-file (locate-library "my-data-lib"))
在主要模式的初始阶段,我只是这样做:
(load "my-data-lib")
不需要和读取操作,并且优点是我也不需要提供任何文件路径,只是在加载路径上某处有这样的文件就足够了。 Emacs会找到它。 elisp岩石。 :)
答案 2 :(得分:2)
包gCoin = prefs.getInteger("goldCoin", 0);
可以为您完成:
desktop