我正在尝试编写一个函数,在给定文件路径的情况下,该函数将加载该文件的内容并将其附加到列表中。最终目标是为每个组织捕获模板提供一个文件,并从文件列表或组织表中加载它们。
我的问题是,如果加载成功,load和load-file函数只返回t。
我可以使用什么函数将文件的内容作为表达式返回?
例如,给定文件test.el:
'("foo" "bar" "baz" "fnord")
如何实现以下目标:
(mysterious-function "~/test.el")
=> '("foo" "bar" "baz" "fnord")
提前致谢
答案 0 :(得分:3)
(defun mysterious-function (filename)
(setq filename (expand-file-name filename))
(with-temp-buffer
(insert-file-contents filename)
(read (current-buffer))))
答案 1 :(得分:2)
正如@barmar在评论中所建议的那样:
(defun read-from-file (file)
(with-temp-buffer
(insert-file-contents file)
(read (current-buffer))))
请注意,由于您正在阅读而不进行评估,因此您无需将引号放入文件中。
如果由于某种原因,你已经在文件中有引号,你应该不使用eval
来摆脱它,因为这会引入一个安全漏洞(想象一个文件,包含表单(launch-missiles)
)。你应该这样做:
(defun my-unquote (form)
(if (and (eq (first form) 'quote)
(null (cddr form)))
(second form)
form))