是否可以编写一个使用内部变量的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)
使用反引号文字.可以像列表一样使用.
(setq inner ["d" "e"])
`["a" "b" ,inner]
=> ["a" "b" ["d" "e"]]
Run Code Online (Sandbox Code Playgroud)