如何在Emacs Lisp中评估引用表达式的部分内容

Ger*_*ann 4 emacs elisp

假设我有一个返回引用列表的函数,如下所示:

(defun create-structure (n l)
  '(structure (name . n)(label . l)))
Run Code Online (Sandbox Code Playgroud)

我想要返回的功能:

(create-structure foo bar)
-> '(structure (name . foo)(label . bar))
Run Code Online (Sandbox Code Playgroud)

相反,我得到了惊喜:

-> '(structure (name . n)(label . l))
Run Code Online (Sandbox Code Playgroud)

Dan*_*dau 7

至少有两种方法可以实现这一点,使用反引用语法或显式调用列表.

(defun create-structure-1 (n l)
  `(structure (name . ,n) (label . ,l)))

(defun create-structure-2 (n l)
  (list 'structure (cons 'name n) (cons 'label l)))
Run Code Online (Sandbox Code Playgroud)

GNU Emacs Lisp Reference提供了关于该主题的良好读物: - http://www.gnu.org/software/emacs/manual/html_node/elisp/Backquote.html#Backquote

  • 您不需要为此使用宏,您也可以在函数中使用反引号和逗号.反引号意味着单引号,因此您不需要同时使用两者.代替你的宏,你可以这样做:`(defun create-structure(nl)\`(structure(name.,n)(label.,l)))` (3认同)