【问题标题】:How to use variable names inside literals in Emacs Lisp?如何在 Emacs Lisp 的文字中使用变量名?
【发布时间】:2012-01-21 08:19:33
【问题描述】:

是否可以写例如一个 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 的基本原理是什么?我当然可以解决这个问题,但我想了解发生了什么。

【问题讨论】:

    标签: emacs lisp elisp


    【解决方案1】:

    当使用向量语法时,元素被认为是常量。来自 Emacs Lisp 参考手册 6.4:

    一个向量,就像一个字符串或一个数字,被认为是一个常数 评估:评估它的结果是相同的向量。这确实 不评估甚至检查向量的元素。

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

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

    【讨论】:

      【解决方案2】:

      使用反引号文字。可以和list一样使用。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        • 1970-01-01
        相关资源
        最近更新 更多