这可能很愚蠢,但我没有足够的Elisp知识来了解引用和评估方面的情况。
假设我有这个Elisp代码:
(add-to-list 'default-frame-alist '(width . 100))
(add-to-list 'default-frame-alist '(height . 50))
它将产生预期的default-frame-alist值:
((height 50)
(width 100))
但是现在如果我有这个:
(setq my-frame-width 100)
(setq my-frame-height 50)
(add-to-list 'default-frame-alist '(width . my-frame-width))
(add-to-list 'default-frame-alist '(height . my-frame-height))
这将导致 -
((height my-frame-height)
(width my-frame-width))
并且,从框架几何图形来看,永远不会评估这些变量。如何在此列表中显示my-frame-width和height的实际值?我的报价太多了吗?但我无法从添加到列表的评估中删除任何内容......
答案 0 :(得分:34)
试试这个:
(setq my-frame-width 100)
(setq my-frame-height 50)
(add-to-list 'default-frame-alist `(width . ,my-frame-width))
(add-to-list 'default-frame-alist `(height . ,my-frame-height))
使用反引号而不是引号允许您使用,强制评估参数。
请参阅Elisp参考手册。键入C-x信息,搜索elisp参考手册,然后在其中搜索反引号。
答案 1 :(得分:13)
作为mch答案中反引号运算符的替代方法,您可以使用cons
函数。此函数将构建一个cons单元,第一个参数作为其car,第二个参数作为其cdr。代码中的虚线对符号是此的简写。所以我们可以这样重写你的代码:
(setq my-frame-width 100)
(setq my-frame-height 50)
(add-to-list 'default-frame-alist (cons 'width my-frame-width))
(add-to-list 'default-frame-alist (cons 'height my-frame-height))
这样,您可以引用想要按字面意思显示的符号(如宽度和高度),并评估所需值的符号(如my-frame-width和my-frame-height)。我更喜欢这种方法,因为它更直接。但是,这肯定是一个意见问题。这里还有一些information on cons and list供将来参考。