Emacs Lisp中@字符的作用是什么?

4

例如,在这个宏定义中使用:

(defmacro with-eval-after-load-feature (feature &rest body)
  (declare (indent 1) (debug t))
  (let* ((feature (if (and (listp feature) (eq (car-safe feature) 'quote))
                      (cdr feature) feature))
         (fs (if (listp feature) feature (list feature)))
         (form (or (and (eval '(eval-when (compile)
                                 (with-eval-after-load-feature-preload fs)))
                        'with-no-warnings)
                   'progn)))
    `(,form ,@(with-eval-after-load-feature-transform fs body))))

这个文件中涉及到了IT技术相关内容。
2个回答

6

它用于反引号表达式中的拼接。请参见C-h i g (elisp) Backquote RET。例如:

elisp> `(1 2 ,(list 3 4))  ; no splicing => nested list
(1 2
   (3 4))

elisp> `(1 2 ,@(list 3 4)) ; splicing => flat list
(1 2 3 4)

2
它还可以帮助说明 ,@ 本质上与 , . 相同(您也可以使用后者)。 - Drew
2
@Drew,你是指,. 还是.,,例如(1 2 .,(list 3 4))?第一个在Emacs Lisp中不起作用(虽然在CL中可以),第二个只有在拼接在末尾时才有效。 - danlei
2
是的,你说的两件事我都同意。我指的是 **. ,**,当然只能跟着一个东西。感谢你的纠正。 - Drew
谢谢你的回答!评论也很好地将其放置在背景中。 - Andrzej Pronobis

3

询问Emacs总是一个明智的做法:

  • C-hig (elisp) RET
  • I @ RET

这将显示所有elisp手册中与@相关的索引条目(其中之一是您实际正在查找的,@)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接