(require 'flycheck-swift3)
(with-eval-after-load 'flycheck
(add-hook 'flycheck-mode-hook #'flycheck-swift3-setup))
和
(require 'flycheck-swift3) ; Not necessary if using ELPA package
(with-eval-after-load 'flycheck
(add-hook 'flycheck-mode-hook 'flycheck-swift3-setup))
这两种哪种是对的?我在一些配置指南上看到了这两种情况都有的例子,那么加了个#
号有什么区别?
add-hook
没必要放在 with-eval-after-load
里面
1 个赞
可写可不写。写的好处是 #'
可以作为标记,让人一眼就能看出这个位置是个函数,不是别的东西。并且 Byte Compiler 在编译期间会检测这个函数是否有定义,如果没有的话(比如你犯了个 typo 错误的话),你会被告知:
~$ cat a.el
(with-eval-after-load 'flycheck
(add-hook 'flycheck-mode-hook 'flycheck-swift3-setup))
~$ diff -u a.el b.el
--- a.el 2017-06-04 00:21:41.000000000 +0800
+++ b.el 2017-06-04 00:21:41.000000000 +0800
@@ -1,2 +1,2 @@
(with-eval-after-load 'flycheck
- (add-hook 'flycheck-mode-hook 'flycheck-swift3-setup))
+ (add-hook 'flycheck-mode-hook #'flycheck-swift3-setup))
~$ emacs --batch -f batch-byte-compile a.el
~$ emacs --batch -f batch-byte-compile b.el
In end of data:
b.el:3:1:Warning: the function ‘flycheck-swift3-setup’ is not known to be
defined.
不写的好处是可以少打一个字,而且 Function Quote #'
似乎是比较新的 Emacs 才有的,比如说 Emacs 22.1(2007 年)就没有这个功能。
2 个赞