[英]Elisp: defmacro with &body and &rest behave differently?
我認為&body
和&rest
應該表現相同,所以這讓我感到困惑:
ELISP> (defmacro mrest (&rest rest))
mrest
ELISP> (mrest)
nil
ELISP> (mrest 1)
nil
ELISP> (mrest 1 2)
nil
ELISP> (mrest 1 2 3)
nil
ELISP> (mrest 1 2 3 4)
nil
ELISP> (defmacro mbody (&body body))
mbody
ELISP> (mbody)
*** Eval error *** Wrong number of arguments: (lambda (&body body) nil), 0
ELISP> (mbody 1)
*** Eval error *** Wrong number of arguments: (lambda (&body body) nil), 1
ELISP> (mbody 1 2)
nil
ELISP> (mbody 1 2 3)
*** Eval error *** Wrong number of arguments: (lambda (&body body) nil), 3
ELISP> (mbody 1 2 3 4)
*** Eval error *** Wrong number of arguments: (lambda (&body body) nil), 4
為什么 elisp 堅持mbody
在這里正好有兩個 arguments ?
Emacs Lisp defmacro
根本不支持&body
。 因此,在您的示例中, &body
是兩個強制性 arguments 之一的名稱。
您需要cl-lib
變體cl-defmacro
。
我認為您剛剛為宏定義了兩個輸入, &body
和body
,因為它們都是有效的符號名稱,所以要求兩個 arguments 是合乎邏輯的。
https://www.gnu.org/software/emacs/manual/html_node/elisp/Symbol-Type.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.