加载文件和加载之间的区别


17

我浏览了两个函数的文档,但是它们似乎并没有散布太多信息。它们之间的实际区别是什么,除了事实load是C源代码中的内置函数,而load-file是交互式列表编译函数。

init.el由于两者似乎都在做相同的工作,因此推荐使用什么功能?


2
在这方面,文档的哪一部分不清楚?如果您确实认为存在以下问题,请考虑报告文档问题:M-x report-emacs-bug。正如@shosti所说,并且正如doc明确指出的那样,load-file没有使用load-path,也没有附加后缀 ”,这是两个重要的区别。
Drew

另请参阅Emacs手册“节点Lisp库”
Drew

Answers:


14

有几种方法可以在Emacs中加载Lisp文件:

  1. load-file接受文字文件名(相对或绝对)并加载代码。例:(load-file "/usr/local/share/site-lisp/foo.el")
  2. load就像一样load-file,不同之处在于它更灵活-您可以省略扩展名,它会根据需要自动加载“ elc”或“ el”文件。
    它还会查看load-path目录。
    示例:((load "foo")如果“ foo.el”在当前目录或在加载路径中)。
  3. load-library是的交互式界面load
  4. require与相似load,不同之处在于,它可以防止文件被多次加载(provide在相关文件的末尾还需要相应的语句)。例:(require 'foo)

3
您的require示例就是一个load示例。;-)
Drew

load-file示例使用load。:)
itsjeyd 2014年

2
抱歉地说2和3是错误的。:-) load 确实会查看加载路径。
马拉巴巴

@Malabarba糟糕,您是对的,感谢您的纠正。这比我想象的还要混乱。
shosti 2014年

8

load-fileload-library是用于交互使用的命令(主要区别在于提示的初始内容)。

load是编写Elisp时要使用的基础函数(例如在.emacs中)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.