我看到with-eval-after-load和eval-after-load的实例里,都有FROM参数前加引号和不加引号的,那个引号有什么用? 引号:
(eval-after-load 'foo
'(bar))
不加引号:
(eval-after-load 'foo
(bar))
Update 不好意思整错了……
我看到with-eval-after-load和eval-after-load的实例里,都有FROM参数前加引号和不加引号的,那个引号有什么用? 引号:
(eval-after-load 'foo
'(bar))
不加引号:
(eval-after-load 'foo
(bar))
Update 不好意思整错了……
这是backquote吧……
我现在想知道的single-quote……
" ’ “而不是” ` "
================ 不好意思原问题有个Typo……我这不认真的毛病什么时候能改改……
还有问题——应该用的是 '
(39) 不是 ‘
(8216),你可能需要关掉输入法再输入单引号。
?'
=> 39
?‘
=> 8216
我已经替你改了。
表面的作用差不多。 至于具体干什么的,没有具体例子不好判断。麻烦不要怕贴太多,直接贴整个表达式。
eval-after-load
是一个函数,函数参数位置上的表达式会在函数调用之前就计算完毕。所以想在 foo
加载之后执行 (bar)
的话,需要用:
(eval-after-load 'foo
(quote (bar)))
等价于:
(eval-after-load 'foo
'(bar))
事实上只要 eval-after-load
接收到 (bar)
(一个列表:含一个元素,该元素为一个符号 bar
)就行,所以下面这几种效果相同:
(quote (bar))
=> (bar)
'(bar)
=> (bar)
(list #'bar)
=> (bar)
((lambda () '(bar)))
=> (bar)
如果写成
(eval-after-load 'foo
(bar))
表示立即执行 (bar)
,然后再把它的返回值传递给 eval-after-load
。加不加引号是完全不同的意思。
其实就是我在群里问的关于chinese-pyim的那个傻问题。
所以如果我想在chinese-pyim加载之后加载(chinese-pyim-basedict-enable)
我就应该写成如下形式:
(with-eval-after-load 'chinese-pyim
'(chinese-pyim-basedict-enable))
那么, 我看到很多配置(尤其是用diminish的时候)也会写成不加single-quote的形式, 比如purcell的配置里就有大量的这种代码:
(with-eval-after-load 'company
(diminish 'company-mode "CMP"))
那么这种代码是为了达到什么效果?既然是立即执行,那为啥还要after-load ?
还有,with-eval-after-load
和eval-after-load
对single-quote的处理是否相同?
谢谢各位!
=================
此贴可以关了…… 实际上不加single-quote的写法在purcell那里也是不存在的……一切都是因为我只抄了别人的代码就用却连看都不看……
(if (fboundp 'with-eval-after-load)
(defalias 'after-load 'with-eval-after-load)
(defmacro after-load (feature &rest body)
"After FEATURE is loaded, evaluate BODY."
(declare (indent defun))
`(eval-after-load ,feature
'(progn ,@body))))
最后一行那个大大的quote我愣是瞪眼睛也看不见…… 所以这回完全是我的锅……总之也算是个教训吧……
该主题在创建20小时后自动关闭。不再允许新的回复。