coo*_*ate 6 lisp emacs elisp list
我使用这样的代码:
(defvar my-defvar "test")
(completing-read "input: " '("1" "2" my-defvar))
Run Code Online (Sandbox Code Playgroud)
然后M-x eval-region.我my-defvar在迷你缓冲区中得到了"1","2" .
我的问题是如何my-defvar在列表中转换为字符串.
Lin*_*cer 12
在Lisp中,´-symbol将引用表达式的其余部分.这意味着该值将完全按照写入的方式表达,不评估函数调用,不替换变量值等.
最直接的方法是list在评估它的参数后使用创建元素列表的函数,例如:
(completing-read "input: " (list "1" "2" my-defvar))
Run Code Online (Sandbox Code Playgroud)
当然,您也可以使用反引用语法,如另一个答案所示.这可以让你引用一个复杂的表达式,但所享有(即评估),它的一部分.但是,在这个简单的案例中,我认为这不是适合这项工作的工具.
my-defvar 未被评估为变量,它被解释为符号.
所以:
(defvar my-defvar "test")
(completing-read "input: " `("1" "2" ,my-defvar))
Run Code Online (Sandbox Code Playgroud)
应该管用.
更新:在@ Lindydancer的答案中给出了一个更合适的解决方案,但我将其留在此处以供参考.
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |