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

2019-08-17 16:17发布

我读subr.el,看到这样的代码:

(defalias 'backward-delete-char 'delete-backward-char)
(defalias 'search-forward-regexp (symbol-function 're-search-forward))

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

是否有一个情况下,当第二种方法比第一种方式更好?

Answer 1:

这两个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|
+----------------------------+     +--------------------+     +--------------------+

该文件可能有助于清楚的事情了。



Answer 2:

嗯,果然是不一样的事情...这里是一个小游戏,我只是打:

(defun a () (message "hello"))
a
(a)
"hello"
(defalias 'b (symbol-function 'a))
(lambda nil (message "hello"))
(defalias 'c 'a)
a
(b)
"hello"
(c)
"hello"
(defun a () (message "howdy"))
a
(a)
"howdy"
(b)
"hello"
(c)
"howdy" ' c changed meaning, b did not...


文章来源: difference between (defalias 'A (symbol-function 'B)) and (defalias 'A 'B)