符号前面的'和#'有什么区别?


22

我对Emacs有点陌生。当查看某些配置时,我发现“ add-hook”中有两种类型的命令。

(add-hook 'LaTeX-mode-hook #'LaTeX-math-mode)

(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)

这让我很困惑了很长时间,而且我不知道如何在Google中搜索“#'” ...

谢谢。


2
对不起这是我的错。找到了答案:stackoverflow.com/questions/2701698/...
X.Arthur


2
在其他站点上重复也可以。不过这里有一个,几乎是重复的。emacs.stackexchange.com/q/3595/50
Malabarba

Answers:


21

在Emacs Lisp中,如果foo是符号,则'foo#'foo完全等效。#'foo是函数时,后一种形式(带有)是首选的,因为它证明了要被有趣地调用的事实。

因此,您的两种形式是完全等效的,#'首选是。

编辑:正如马拉巴(Malabarba)所指出的,这不是很正确:#'如果未定义函数,则打开符号将导致字节编译器发出警告。

(请注意,lambda形式不是这种情况,因为plain '阻止字节编译器编译lambda形式,如其他地方所述。另外请注意,其他Lisp方言也不一定是这种情况,例如Common Lisp #'foo执行早期绑定。)


关于警告的权利。至于lambda,#'指示编译器编译lambda,而不是普通引号。我已经以更清晰的方式重新制定了。
jch 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.