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

aur*_*amo 6 lisp emacs elisp

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

例如:

(setq inner ["d" "e"])
["a" "b" inner]
Run Code Online (Sandbox Code Playgroud)

结果成:

["a" "b" inner]
Run Code Online (Sandbox Code Playgroud)

但我想要的是:

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

我在Elisp之前做了一些Clojure编码,它按照我的预期工作:

(def inner ["d" "e"])
user=> ["a" "b" inner]             
["a" "b" ["d" "e"]]
Run Code Online (Sandbox Code Playgroud)

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

Lin*_*cer 13

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

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

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

(setq inner ["d" "e"])
(vector "a" "b" inner)
=> ["a" "b" ["d" "e"]]
Run Code Online (Sandbox Code Playgroud)


d58*_*884 8

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

(setq inner ["d" "e"])
`["a" "b" ,inner]
=> ["a" "b" ["d" "e"]]
Run Code Online (Sandbox Code Playgroud)