gpt4 book ai didi

emacs - 提供和要求 Emacs Lisp 包子功能(如何)

转载 作者:行者123 更新时间:2023-12-05 00:50:57 25 4
gpt4 key购买 nike

我写 Emacs Lisp 包已经有一段时间了。但是,我还没有找到/遇到使用 require 和提供子功能的单个示例。老实说,Emacs Lisp 手册中给出的解释绝对是可笑的。它会告诉您为什么要使用子功能,但没有说明如何使用它们。它甚至不会告诉您 require 和 provide 中的子功能参数是否应该是路径或文件名中文件的符号。因此,我的问题...

有人可以提供一个非常简单的子功能如何工作的例子吗?
具体来说:

  • 你能给我一个提供一个功能和两个子功能的包的简单例子吗?
  • 你能给我举个例子,它需要上述特性,并且只有 1
  • 中的包提供的两个子特性之一。

    非常感谢提前,

    巴勃罗

    最佳答案

    免责声明:在我阅读这个问题之前,我什至不知道子功能是一回事。

    子功能似乎用于复杂功能,这些功能可能在一个平台(例如 Linux)上具有某些功能,但在另一个平台(例如 Windows)或某些类似情况下没有。该功能的用户可以测试子功能并在它不存在时执行变通方法。

    至于使用子功能,您只需添加一个列表参数,如 (provide 'foo '(bar baz)) ,但更有可能使用一些以编程方式生成的列表,例如

    (setq foo--subfeatures ())
    (when (barp)
    (setq foo--subfeatures (cons 'bar foo--subfeatures)))
    (provide 'foo foo--subfeatures)

    然后用 (featurep 'foo 'bar) 测试确保 foobar子功能。子功能只是符号。带有子功能的功能的内置示例是 make-network-process ,它是用 C 实现的,但即使你不熟悉 C,子功能机制也应该很清楚。lisp 中的另一个例子是 providefiles.el和相应的 featureptramp-compat.el .

    看起来不像 require完全关心子功能;它的工作是加载一个未加载的功能,并且一个功能加载了所有子功能。子功能在 subfeatures 中实现为列表特征符号的属性,例如 (get 'foo 'subfeatures) -> (bar baz) .它看起来像 provide覆盖该属性,因此只有最后一次调用 provide是相关的。

    关于emacs - 提供和要求 Emacs Lisp 包子功能(如何),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45009575/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com