在elisp中在单引号前面有一个井号代表什么作用

(add-hook 'after-init-hook #'global-flycheck-mode) 比如这个 给钩子附加一个值 这个 #号 在这里起什么作用呢?

大概就是匿名函数的简写,比如:

(lambda (x) (* x x))
(function (lambda (x) (* x x)))
#'(lambda (x) (* x x))

是等价的。

参考网站

2 个赞

语法糖,‘表示对符号的引用,#'表示对函数的引用。

2 个赞

实际上不加井号也可以引用函数,但是加上井号的话可以提示byte-compiler这是一个函数,可能会有一些优化之类的。

1 个赞

#' (sharp quote)是 function 的简写,所以可以用 C-h fC-h S 来阅读 docstring 和 manual。

sharp-quote 原来用来 quote 但编译一个 lambda 的,现在没必要了,因为 lambda 自带了这个效果。

sharp-quote 现在可以用来提示 byte-compiler (和编写、阅读代码的人)后面接的是一个函数,而不是变量或其它别的普通的符号。

比如,sharp-quote 一个未定义的函数,byte-compiler 会给出一个警告:

~$ cat foo.el 
(mapc #'not-defined nil)
~$ emacs -batch -f batch-byte-compile foo.el 

In end of data:
foo.el:2:1:Warning: the function ‘not-defined’ is not known to be defined.

如果用 quote 的话,就不会有这个警告:

~$ cat foo.el 
(mapc 'not-defined nil)
~$ emacs -batch -f batch-byte-compile foo.el 
~$

Flycheck 这样的工具也能实时捕捉到这种问题,也有助及时发现 bug。


这里有一篇介绍 sharp-quote 的文章:

17 个赞