如何在Emacs Lisp中使用字面量内的变量名?

6

是否可能编写一个使用内部变量的Vector字面值,以便正确评估变量,并且生成的Vector不仅包含变量的名称/符号?

例如:

(setq inner ["d" "e"])
["a" "b" inner]

Results into:

["a" "b" inner]

但是我想要的是:

["a" "b" ["d" "e"]]

我之前在Clojure编码,然后在Elisp中也按照我的期望工作。
(def inner ["d" "e"])
user=> ["a" "b" inner]             
["a" "b" ["d" "e"]]

我对Elisp的基本知识有什么不理解的地方吗?当然,我可以绕过这个问题,但我想了解到底发生了什么。

2个回答

13

使用向量语法时,元素被视为常量。根据Emacs Lisp参考手册6.4:

向量、字符串或数字等都被认为是一个常量进行评估:评估的结果是相同的向量。这不会评估甚至检查向量的元素。

另一方面,您可以使用vector函数创建一个对元素进行评估的向量:

(setq inner ["d" "e"])
(vector "a" "b" inner)
=> ["a" "b" ["d" "e"]]

8

使用反引号字面量。可以像列表一样使用。

(setq inner ["d" "e"])
`["a" "b" ,inner]
=> ["a" "b" ["d" "e"]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接