(define-syntax my-class
(syntax-rules ()
[(my-class <class-name> (<attr> ...)
(method (bigger-x other) (> x (other 'x))))
(define (<class-name> <attr> ...)
(lambda (msg)
(cond [(equal? msg (quote <attr>)) <attr>] ...
[(equal? msg 'bigger-x) (lambda (other) (> x (other 'x)))]
[else "Unrecognized message!"])))]))
这不是一个好的模板。但它有助于解释define-syntax
. 我很困惑为什么第 4 行只有 1 种方法。quote <attr>
表达式中的不[(equal? msg (quote <attr>)) <attr>]
也是一种方法吗?它们的结构非常相似。