如何访问列表中变量的值?

How to access the value of a variable inside a list?

我是 ELisp 的新手,我无法设置变量值以便稍后访问。我读 the documentation on accessing variable values and tried the answers in this thread,但我仍然得到 Wrong type argument: char-or-string-p

这是我的 *scratch* Emacs 缓冲区的输出,它运行代码并在出现任何副作用后将其插入:

(defvar my-var "var"  "Some documentation")
my-var

my-var
"var"

(symbol-value 'my-var)
"var"

我可以迭代一个由值作为文字的列表:

(dolist (v '("var"))
  (insert v))
varnil

但是每一次将值作为变量迭代的尝试都失败并出现相同的错误 Wrong type argument: char-or-string-p:

(dolist (v '(my-var))
  (insert v))

(dolist (v '((format "%S" my-var)))
  (insert v))

(dolist (v '((symbol-value 'my-var)))
  (insert v))

如何迭代由变量值构成的列表?

您需要评估您的变量:

(dolist (v (list my-var))
  (insert v))

或自己获取值:

(dolist (v (list 'my-var))
  (insert (symbol-value v)))

如果你想混合使用变量和文字,那么使用第一种方法:

(defvar my-var "var"  "Some documentation")

(dolist (d (list my-var
                 "other-var"))
  (insert d))

另见 When to use ' (or quote) in Lisp?