我有一个双重问题,希望得到专家的建议。
1)在对某些代码进行语法分析时,我需要存储找到的组件供以后使用。我现在考虑将这些存储为属性列表(一个孤立的,不是包含代码的字符串之一,因为这在我看来很像滥用,虽然它会很方便)。这是针对所有惯例还是处理这种情况的合理方式?
2)我无法在(let ... )
语句中创建属性列表。
这有效:
(setq x "BAR")
(setq pl `(bar ,x))
(setq pl (plist-put pl 'foo "FOO"))
(plist-get pl 'foo) ; returns "FOO"
但这并不是:
(let (pl `(bar ,x))
(setq pl (plist-put pl 'foo "FOO"))
(plist-get pl 'foo))
Emacs抱怨虚函数栏。尽管有反击,但它显然试图评估(bar ...)
。为什么呢?
答案 0 :(得分:2)
缺少括号。让我们扩展特殊的反引号表示法:
(let (pl (\` (bar (\, x))))
(setq pl (plist-put pl 'foo "FOO"))
(plist-get pl 'foo))
这声明了一个变量pl
(没有初始值,因此初始化为nil
)以及一个名为`(正确:它的名称是“反引号”)的变量初始化为该值(bar (\, x))
。
因此,您想要编写以下内容:
(let ((pl `(bar ,x)))
...)