0

在 ELisp 中,您可以使用自动加载 cookie 跳过对定义的评估。该定义仅在使用后进行评估。

;; File foo.el

;;;###autoload
(defun foo ()
  "Doc"
  42)

(defun bar ()
  "Doc"
  43)

所以,如果我理解正确,自动加载功能是一种更快加载文件的技巧。但是当我加载时foo.el,为了跳过 foo 的定义,解释器仍然必须阅读整个表单。我不明白为什么它更快。

4

3 回答 3

3

加载文件内容的最简单方法foo.el是执行load. 但是,这样做代价高昂,因为您必须阅读整个文件。

autoload你可以告诉emacs:“函数在foo文件中定义foo.el”。这样,emacs 就不会读取文件,并且您无需支付加载费用。当您foo第一次使用该函数时,emacs 会通过阅读foo.el.

您文件中的;;;###autoload注释本身并没有为自动加载做任何事情。您需要使用一个程序来获取所有这些定义并将它们放入一个文件foo-autoloads.el(或任何其他名称)中。对于每个函数,它将放置一行告诉 emacs 哪个文件包含它。然后在你的.emacsyou willload foo-autoloads.el而不是foo.el. foo.el将在您第一次使用 function 时被 emacs 读取foo

注意:require也可以用load在上面的解释中代替。

于 2012-06-14T19:06:02.950 回答
2

你从哪里得到这样的“理解”?肯定不是说明书

自动加载 cookie 用于在单独的自动加载文件中提取骨架函数/变量定义。这通常在编译时完成。

如果不执行该编译步骤,自动加载 cookie 将无效。

于 2012-06-14T13:52:27.403 回答
1

自动加载表单必须单独加载。它们可以从自动加载 cookie 生成,但您也可以手动编写它们。例如,在您的 .emacs 中,您可以为仅偶尔使用的功能放置自动加载表单,因此它们仅按需加载。

例如:

(autoload 'ahk-mode "ahk-mode")
于 2012-06-14T14:03:57.237 回答