我读subr.el,看到这样的代码:
(defalias 'backward-delete-char 'delete-backward-char)
(defalias 'search-forward-regexp (symbol-function 're-search-forward))
有趣的是,第二行则第一行不使用符号函数。 我知道的使用defalias的这两种方式的唯一区别是,向后删除炭(第一个)的帮助下将显示这是删除后向焦炭的别名而对于搜索前进,正则表达式的帮助,没有按”吨。
是否有一个情况下,当第二种方法比第一种方式更好?
这两个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|
+----------------------------+ +--------------------+ +--------------------+
该文件可能有助于清楚的事情了。
嗯,果然是不一样的事情...这里是一个小游戏,我只是打:
(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...