何时应该使用`require`一个被`autoload`的包?

6
例如,evil是自动加载的
一些博客/帖子会使用。
(require 'evil)
(evil-mode 1)

启用恶魔模式。

据我所知,Elisp是lisp2,而evil-mode也是一个函数,因此不需要使用setq

(defadvice evil-mode (after start-evil activate)
  "Enable Evil in Fundamental mode."
  (if evil-mode
      (progn
        (when (eq (default-value 'major-mode) 'fundamental-mode)
          ;; changed back by `evil-local-mode'
          (setq-default major-mode 'turn-on-evil-mode))
        (ad-enable-regexp "^evil")
        (ad-activate-regexp "^evil")
        (with-no-warnings (evil-esc-mode 1)))
    (when (eq (default-value 'major-mode) 'turn-on-evil-mode)
      (setq-default major-mode 'fundamental-mode))
    (ad-disable-regexp "^evil")
    (ad-update-regexp "^evil")
    (with-no-warnings (evil-esc-mode -1))))

但是,因为使用了autoload

(evil-mode 1)

即使没有 require,也能正常工作(至少对我来说是这样)。

(如果下面的内容有任何错误,请纠正我,谢谢)

我的问题是,当所需的软件包已自动加载时,我什么时候必须使用 require

1个回答

7
您说得对 -- 如果已经评估了对于 evil-modeautoload声明,那么在 (evil-mode 1) 之前没有必要进行 (require 'evil)
然而,个别用户可能需要执行 (require 'evil)。这取决于库的安装方式。单独使用 ;;;###autoload 标记是无效的;但如果您使用 package.el 安装了 evil,那么它们将被解析并转换为一组 autoload 声明文件,在初始化包时 Emacs 将会加载它们。
如果您未使用软件包管理器安装库,则可能需要 require 它,或者为您可能调用的函数编写自己的 autoload 声明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接