什么Emacs Lisp函数是'require',就像'autoload'是'load'?
我正在尝试编程GNU Emacs 23,以便根据需要惰性地发出什么Emacs Lisp函数是'require',就像'autoload'是'load'?,emacs,elisp,Emacs,Elisp,我正在尝试编程GNU Emacs 23,以便根据需要惰性地发出require命令,而不是在我的.Emacs文件中预先发出命令。如果我想延迟执行load命令,我可以使用autoload。但是require和load采用不同类型的参数 是否有一个预定义的函数,用于要求与自动加载用于加载的作业相同?如果没有,人们会推荐我使用什么工具来推出自己的产品?您对“随需应变”有什么样的“需求” 如果给定的命令或其他函数需要(或软件需要)给定的库,则该函数本身可以使用(require'foo)或(require'
require
命令,而不是在我的.Emacs
文件中预先发出命令。如果我想延迟执行load
命令,我可以使用autoload
。但是require
和load
采用不同类型的参数
是否有一个预定义的函数,用于要求与自动加载
用于加载
的作业相同?如果没有,人们会推荐我使用什么工具来推出自己的产品?您对“随需应变”有什么样的“需求”
如果给定的命令或其他函数需要(或软件需要)给定的库,则该函数本身可以使用(require'foo)
或(require'foo nil t)
。库将根据需要从该函数加载
还要考虑是否需要多次加载文件,即在某些情况下重新加载文件,无论是否已加载
例如,对于#2,我使用Lisp宏库的代码不只是使用require
,因为我想确保如果用户获得该库的新版本(例如,下载新的源版本并进行字节编译),那么每当字节编译另一个需要它的库时,就会使用该新版本。(这一点很重要——当宏库发生更改时,使用这些宏的其他库通常需要在加载新宏文件后重新编译。)为此,我使用以下方法,而不仅仅是(需要'icicles mac)
:
(eval-when-compile
(or (condition-case nil
(load-library "icicles-mac") ; Use load-library to ensure latest .elc.
(error nil))
(require 'icicles-mac))) ; Require, so can load separately if not on `load-path'.
require
和load
在自动加载方面没有区别<代码>要求
只是加载
的前端,大致可归结为:
(defun require (feature &optional filename noerror)
(unless (featurep feature)
(let ((filename (or filename (symbol-name feature))))
(load filename noerror))))
如您所见,指定给require
的符号名等于指定给load
的文件名。事实上,在Emacs会话中计算的第一个(require'foo)
相当于(load“foo”)
因此,您可以使用(自动加载'foo函数“foo”)
从库foo
中加载(需要'foo)
)中的foo函数
,然后再加载一个有助于澄清的答案(这对于注释来说有点冗长):
autoload
表示“如果尚未定义此函数,则load
此文件(如果函数被调用时)。”
require
表示“如果此库尚未加载,则load
立即加载此文件。”
请特别注意,您不需要使用require
来加载库;这就是确保不再加载它的简单方法(假设您不想这样做)。无论库是如何加载的,库中的(提供”功能)
表达式都将被评估,这让任何未来的需要知道它不需要做任何事情
对于自动加载
,情况也类似——如果文件已经加载(因此正确定义了相关功能),那么自动加载将不再有任何效果。您能否举例说明如何使用自动加载
(可能有帮助)