这可能很愚蠢,但我没有足够的Elisp知识来理解引用和评估方面的情况.
假设我有这个Elisp代码:
(add-to-list 'default-frame-alist '(width . 100))
(add-to-list 'default-frame-alist '(height . 50))
Run Code Online (Sandbox Code Playgroud)
它将导致预期的default-frame-alist值:
((height 50)
(width 100))
Run Code Online (Sandbox Code Playgroud)
但是现在如果我有这个:
(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))
Run Code Online (Sandbox Code Playgroud)
它会导致 -
((height my-frame-height)
(width my-frame-width))
Run Code Online (Sandbox Code Playgroud)
并且,从框架几何图形来看,永远不会评估这些变量.如何在此列表中显示my-frame-width和height的实际值?我的报价太多了吗?但是我无法从添加到列表的评估中删除任何内容......
mch*_*mch 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))
Run Code Online (Sandbox Code Playgroud)
使用反引号而不是引号允许您使用,强制评估参数.
请参阅Elisp参考手册.键入Cx信息,搜索elisp参考手册,然后在其中搜索反引号.
A. *_*evy 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))
Run Code Online (Sandbox Code Playgroud)
这样,您可以引用想要按字面意思显示的符号(如宽度和高度),并评估所需值的符号(如my-frame-width和my-frame-height).我更喜欢这种方法,因为它更直接.但是,这肯定是一个意见问题.以下是有关缺点和列表的更多信息,以供将来参考.
| 归档时间: |
|
| 查看次数: |
3616 次 |
| 最近记录: |