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

时间:2012-01-21 08:19:33

标签: emacs lisp elisp

是否可以写例如一个Vector文本,它使用一个变量,以便正确地计算变量,结果Vector不仅包含变量的名称/符号?

例如:

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

结果:

["a" "b" inner]

但我想要的是:

[“a”“b”[“d”“e”]]

我在Elisp之前完成了一些Clojure编码,它按预期工作:

(def inner ["d" "e"])
user=> ["a" "b" inner]             
["a" "b" ["d" "e"]]

我在这里对Elisp不了解的基本要素是什么?我当然可以解决这个问题,但我想了解发生了什么。

2 个答案:

答案 0 :(得分:13)

使用矢量语法时,元素被认为是常量。从Emacs Lisp参考手册6.4:

  

矢量,如字符串或数字,被视为常量   评估:评估它的结果是相同的向量。这样做   不评估甚至检查载体的元素。

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

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

答案 1 :(得分:8)

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

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