在 ELisp 中,您可以使用自动加载 cookie 跳过对定义的评估。该定义仅在使用后进行评估。
;; File foo.el
;;;###autoload
(defun foo ()
"Doc"
42)
(defun bar ()
"Doc"
43)
所以,如果我理解正确,自动加载功能是一种更快加载文件的技巧。但是当我加载时foo.el
,为了跳过 foo 的定义,解释器仍然必须阅读整个表单。我不明白为什么它更快。
加载文件内容的最简单方法foo.el
是执行load
. 但是,这样做代价高昂,因为您必须阅读整个文件。
autoload
你可以告诉emacs:“函数在foo
文件中定义foo.el
”。这样,emacs 就不会读取文件,并且您无需支付加载费用。当您foo
第一次使用该函数时,emacs 会通过阅读foo.el
.
您文件中的;;;###autoload
注释本身并没有为自动加载做任何事情。您需要使用一个程序来获取所有这些定义并将它们放入一个文件foo-autoloads.el
(或任何其他名称)中。对于每个函数,它将放置一行告诉 emacs 哪个文件包含它。然后在你的.emacs
you willload
foo-autoloads.el
而不是foo.el
.
foo.el
将在您第一次使用 function 时被 emacs 读取foo
。
注意:require
也可以用load
在上面的解释中代替。
自动加载表单必须单独加载。它们可以从自动加载 cookie 生成,但您也可以手动编写它们。例如,在您的 .emacs 中,您可以为仅偶尔使用的功能放置自动加载表单,因此它们仅按需加载。
例如:
(autoload 'ahk-mode "ahk-mode")