嵌入式`(引用...)`

时间:2015-06-26 06:52:34

标签: emacs elisp

我安装了一些主题,并将以下内容放在我的$HOME/.emacs

(custom-set-variables ; Your init file should only contain one of these
 '(custom-safe-themes (quote ("ea489f6710a3da0738e7dbdfc124df06a4e3ae82f191ce66c2af3e0a15e99b90"
                              "a8245b7cc985a0610d71f9852e9f2767ad1b852c2bdea6f4aadc12cce9c4d6d0"
                              "8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4"
                              default)))
 )

为什么报价中有引号?这不是多余的吗?

1 个答案:

答案 0 :(得分:5)

  

为什么报价中有引号?这不是多余的吗?

这不是多余的,因为它给出了不同的价值; Lisp中的一般情况是(quote foo) => foo(quote (quote foo)) => (quote foo)。所以引用和双引号是不可互换的:其中一个是正确的而另一个不是。

在这种特殊情况下,有多个评估级别,因此需要多层引用。外部引号可防止在函数调用之前对参数进行正常评估,以便custom-set-variables接收列表(custom-safe-themes (quote ("ea489..." ... default))))

最终会传递给custom-theme-set-variableseval会在列表(quote ("ea489..." ... default))的第二个元素上调用(quote

  

我尝试删除*Messages*和相应的paren,它仍然有效。

似乎可以工作,但这只是因为自定义设置功能捕获错误。如果您选中Error setting custom-safe-themes: (invalid-function ea489f6710a3da0738e7dbdfc124df06a4e3ae82f191ce66c2af3e0a15e99b90),则会看到<node1 xmlns:ns1="namespace1"> <node2 xmlns:ns2="namespace2"> <node3...> <node4...> </node2> </node1>