Emacs Lisp:在alist中评估变量
问题描述:
这可能很愚蠢,但我没有足够的Elisp知识来理解关于引用和评估的内容。Emacs Lisp:在alist中评估变量
假设我有这样的elisp代码:
(add-to-list 'default-frame-alist '(width . 100))
(add-to-list 'default-frame-alist '(height . 50))
这将导致预期的默认帧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))
并且从框架几何判断,从不评估这些变量。我如何让这个alist中出现my-frame-width和height的实际值?我有太多报价吗?但我不能从添加到列表评估删除任何...
答
试试这个:
(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参考手册,然后在其中搜索反引用。
答
作为mch的答案中反引号运算符的替代方法,可以使用cons
函数。这个函数将建立一个带有第一个参数的cons单元作为它的汽车,第二个参数作为它的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))
这样,您就可以给你想要的字面(如宽度和高度)出现的符号和评估其价值,你需要(像我的帧宽度符号和我的框架高度)。我更喜欢这种方法,因为它更直接。但是,这当然是一个意见问题。这里有更多的information on cons and list供将来参考。
正是我在找的,谢谢!像这样的问题提醒我,我应该花时间系统地学习elisp。 – 2009-11-02 23:09:16
另请参见[Emacs lisp评估变量在alist](http://*.com/questions/15485833/emacs-lisp-evaluate-variable-in-alist)为一个类似的问题。 – 2013-03-18 20:53:12
我爱直观的显而易见的反引号和逗号的东西。 – Cheeso 2013-06-05 00:08:29