我正在尝试编写GNU Emacs 23来require按需延迟发出命令,而不是在我的.emacs文件中预先发出.如果我想延迟执行load命令,我可以使用autoload.但是require并load采取不同的论点.
是否有确实为一个预定义的功能require,同样的工作autoload做的load?如果没有,人们会建议我使用哪些工具来推销自己的工具?
关于require和之间没有区别. 只是一个前端,或多或少归结为:loadautoloadrequireload
(defun require (feature &optional filename noerror)
(unless (featurep feature)
(let ((filename (or filename (symbol-name feature))))
(load filename noerror))))
Run Code Online (Sandbox Code Playgroud)
如您所见,给定的符号名称require等于给定的文件名load.事实上,(require 'foo)在Emacs会话中评估的第一个等同于(load "foo").
因此,你可以只使用(auto-load 'foo-function "foo")了foo-function从图书馆foo,你可以加载(require 'foo).
还有一个答案可以帮助澄清(这个评论有点冗长):
autoload说"如果这个函数还没有定义,那么load这个文件(如果和函数被调用的话)."require说"如果这个库尚未加载,那么load这个文件(立即)."请特别注意,你没有需要使用require加载库; 这只是你保证你不会加载的方式再次(假设你不希望这样做).(provide 'FEATURE)无论库如何加载,都将评估库中的表达式,这使得任何未来都require知道它不需要做任何事情.
这是一种类似的情况autoload- 如果文件已经被加载(因此正确定义的函数),那么自动加载不再有任何影响.
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |