(defalias'A(符号 - 函数'B))和(defalias'A'B)之间的差异

Yoo*_*Yoo 24 emacs alias elisp function

我正在阅读subr.el并看到这段代码:

(defalias 'backward-delete-char 'delete-backward-char)
(defalias 'search-forward-regexp (symbol-function 're-search-forward))
Run Code Online (Sandbox Code Playgroud)

有趣的是,第一行不使用符号函数,而第二行不使用符号函数.我知道的使用defalias的这两种方式的唯一区别是,向后删除炭(第一个)的帮助下将显示这是删除后向焦炭的别名而对于搜索前进,正则表达式的帮助,没有按"吨.

有没有第二种方式比第一种方式更好的情况?

Tre*_*son 34

这两种defalias用法略有不同.第一个将功能单元链接'backward-delete-char'delete-backward-char.第二个链接'search-forward-regexp到当前调用的函数're-search-forward.

不同之处在于,如果您以后更改'的定义delete-backward-char,'backward-delete-char现在将具有新行为.而在第二种情况下,改变函数对're-search-forward行为没有影响'search-forward-regexp.

也许一些ascii艺术可以帮助:

+-------------------------+     +-----------------+
|#<subr re-search-forward>| <-- |re-search-forward|
+-------------------------+     +-----------------+
                        ^       +---------------------+
                        \------ |search-forward-regexp|
                                +---------------------+

+----------------------------+     +--------------------+     +--------------------+
|#<subr delete-backward-char>| <-- |delete-backward-char| <-- |backward-delete-char|
+----------------------------+     +--------------------+     +--------------------+
Run Code Online (Sandbox Code Playgroud)

文档可能有助于清理问题.