如何在emacs中使用defvar构建列表

时间:2012-03-14 08:43:22

标签: list emacs lisp elisp

我使用了这样的代码:

(defvar my-defvar "test")
(completing-read "input: " '("1" "2" my-defvar))

然后 M-x eval-region。 我在迷你缓冲区中得到了“1”,“2”,my-defvar

我的问题是如何将my-defvar转换为列表中的字符串。

2 个答案:

答案 0 :(得分:12)

在Lisp中,´ - 符号将引用表达式的其余部分。这意味着该值将完全按照写入的方式表达,不计算函数调用,不替换变量值等。

最直接的方法是在评估元素列表之后使用创建元素列表的函数list,例如:

(completing-read "input: " (list "1" "2" my-defvar))

当然,您也可以使用 backquote 语法,如另一个答案所示。这允许您引用复杂的表达式,但取消引用(即评估)它的一部分。但是,在这个简单的案例中,我认为这不是适合这项工作的工具。

答案 1 :(得分:6)

my-defvar未被评估为变量,它被解释为符号。

请参阅Emacs Lisp: evaluate variable in alist

所以:

(defvar my-defvar "test")
(completing-read "input: " `("1" "2" ,my-defvar))

应该有用。

更新:在@ Lindydancer的answer中提供了更合适的解决方案,但我将此留待此处参考。