【问题标题】:How to access the value of a variable inside a list?如何访问列表中变量的值?
【发布时间】:2019-09-26 11:59:17
【问题描述】:

我是 ELisp 的新手,我无法设置变量值以供以后访问。我阅读了the documentation on accessing variable values 并尝试了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))

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

【问题讨论】:

  • 使用函数 LIST 创建列表。使用引号只会为您提供文字数据。将评估 LIST 的参数并将结果放入列表中。 (list (+ 1 2)) -> (3) 与 '((+ 1 2)) -> ((+ 1 2))
  • 请注意,您的 my-var、(format "%S" my-var) 和 (symbol-value 'my-var) 表达式不会被计算,因为它们在引号内。
  • 这条评论也可能有帮助:stackoverflow.com/questions/56523328/…

标签: variables lisp elisp


【解决方案1】:

您需要评估您的变量:

(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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    相关资源
    最近更新 更多