如何在带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
相关产品推荐
相关产品推荐

