You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在带quote的setq中使用可执行条件表达式?

Emacs Lisp 变量赋值中条件表达式的正确写法

你遇到的问题核心是**quote(')会阻止内部表达式求值**——原来的写法里,if表达式没有被执行,只是作为字面列表元素被存起来了,自然不会得到预期的字符串结果。

下面是两种正确的写法:

方法一:使用反引号(backquote)配合逗号(,)

反引号可以整体引用列表,但逗号标记的部分会被求值并插入到列表中:

(setq var `((:item1 ,(if (> 6 (string-to-number (format-time-string "%u")))
                         "stringA"
                         "stringC"))
            (:item2 "stringB")))

方法二:用list函数手动构造列表

直接通过函数调用构建列表,让需要求值的部分自然执行:

(setq var (list (list :item1 (if (> 6 (string-to-number (format-time-string "%u")))
                                 "stringA"
                                 "stringC"))
                '(:item2 "stringB")))

两种写法都能让if表达式被正确求值,把"stringA"或"stringC"作为:item1的值存入变量var。

内容的提问来源于stack exchange,提问作者Alexander Shcheblikin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:27:13