Emacs Lisp函数是`require`,因为`autoload`是`load`?

  发布于 2023-02-06 11:48

我正在尝试编写GNU Emacs 23来require按需延迟发出命令,而不是在我的.emacs文件中预先发出.如果我想延迟执行load命令,我可以使用autoload.但是requireload采取不同的论点.

是否有确实为一个预定义的功能require,同样的工作autoload做的load?如果没有,人们会建议我使用哪些工具来推销自己的工具?

2 个回答
  • 关于require和之间没有区别. 只是一个前端,或多或少归结为:loadautoloadrequireload

    (defun require (feature &optional filename noerror)
      (unless (featurep feature)
        (let ((filename (or filename (symbol-name feature))))
          (load filename noerror))))
    

    如您所见,给定的符号名称require等于给定的文件名load.事实上,(require 'foo)在Emacs会话中评估的第一个等同于(load "foo").

    因此,你可以只使用(auto-load 'foo-function "foo")foo-function从图书馆foo,你可以加载(require 'foo).

    2023-02-06 11:50 回答
  • 还有一个答案可以帮助澄清(这个评论有点冗长):

    autoload说"如果这个函数还没有定义,那么load这个文件(如果和函数被调用的话)."

    require说"如果这个尚未加载,那么load这个文件(立即)."

    请特别注意,你没有需要使用require加载库; 这只是你保证你不会加载的方式再次(假设你不希望这样做).(provide 'FEATURE)无论库如何加载,都将评估库中的表达式,这使得任何未来都require知道它不需要做任何事情.

    这是一种类似的情况autoload- 如果文件已经被加载(因此正确定义的函数),那么自动加载不再有任何影响.

    2023-02-06 11:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有