什么Emacs Lisp函数是'require',就像'autoload'是'load'?

什么Emacs Lisp函数是'require',就像'autoload'是'load'?,emacs,elisp,Emacs,Elisp,我正在尝试编程GNU Emacs 23,以便根据需要惰性地发出require命令,而不是在我的.Emacs文件中预先发出命令。如果我想延迟执行load命令,我可以使用autoload。但是require和load采用不同类型的参数 是否有一个预定义的函数,用于要求与自动加载用于加载的作业相同?如果没有,人们会推荐我使用什么工具来推出自己的产品?您对“随需应变”有什么样的“需求” 如果给定的命令或其他函数需要(或软件需要)给定的库,则该函数本身可以使用(require'foo)或(require'

我正在尝试编程GNU Emacs 23,以便根据需要惰性地发出
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
    来加载库;这就是确保不再加载它的简单方法(假设您不想这样做)。无论库是如何加载的,库中的
    (提供”功能)
    表达式都将被评估,这让任何未来的
    需要
    知道它不需要做任何事情


    对于
    自动加载
    ,情况也类似——如果文件已经加载(因此正确定义了相关功能),那么自动加载将不再有任何效果。

    您能否举例说明如何使用
    自动加载
    (可能有帮助)