我想知道它们之间有什么区别
(add-to-list 'flymake-allowed-file-name-masks '("\\.py\\'" flymake-pylint-init))
和
(add-to-list flymake-allowed-file-name-masks '("\\.py\\'" flymake-pylint-init))
这里的撇号有什么明确的含义?
撇号是一个引用,它告诉解释器不解析以下表达式(符号名称).因此,'add-to-list
获取包含要评估的列表值的符号.
要了解有关符号的更多信息,请阅读符号文档(具体而言,符号组件符号具有名称,值,函数定义和属性列表).
在没有阅读文档的情况下,我就是这样解释的:Emacs lisp的评估策略是按值传递(而不是通过名称或引用或其他方式).如果报价不在那里,flymake-allowed-file-name-masks
将被评估为一个值,并且add-to-list
必须直接在列表上工作.除了以下例外,这将起作用.如果列表为空,则无法更改原始变量指向的内容.出于同样的原因,您将无法在列表的前面添加元素.
要使这两种情况起作用,您实际上需要变量名称,以便您可以修改它指向的内容.
阅读以下内容可能很有用:评估简介,修改列表变量和修改现有列表结构.
如果您熟悉框图,也许这会有所帮助.
想象一下,some-var
指向一个列表:
somevar | | v --- --- --- --- --- --- | | |--> | | |--> | | |--> nil --- --- --- --- --- --- | | | | | | --> rose --> violet --> buttercup
你想把一些东西放在那个清单的前面.
如果所有你必须使用的是指针的值somevar
,那么你可以做的最好的是在列表的前面添加一个新元素,但你实际上无法修改somevar
指向的内容(因为你没有somevar
,你有它的价值).像这样:
somevar | | v --- --- --- --- --- --- --- --- | | |--> | | |--> | | |--> | | |--> nil --- --- --- --- --- --- --- --- | | | | | | | | --> tulip --> rose --> violet --> buttercup
因此,要编写自己的'add-to-list
函数,需要变量名称.
当然,如果你写'add-to-list
一个宏,你不会有限制.