【发布时间】:2015-11-19 17:54:57
【问题描述】:
情况是这样的:我有一个类定义,它的公共方法是使用宏定义的。这些方法看起来像这样:
<-- macro definition surrounds this method -->
(define/public (message-identifier parameters state-values)
message-body ...) ...
其中所有变量(message-identifier、parameters 和 state-values)都是宏扩展的一部分。 message-body 是一系列表达式,就像您在常规方法体中所期望的那样(由宏扩展生成)。方法的主体可能包含一些也扩展的形式,例如,如果您想显式声明返回值,表达式(return 1) 可能是主体的一部分,我们可以应用(例如)以下规则:
(define-syntax-rule (return value)
(displayln "i should return a value!"))
我想知道在类方法的定义中,在这种情况下,return 语句包含在方法的主体中。那么我可以例如动态绑定一个变量吗?这个例子行不通,但它带来了想法。
(define/public (message-identifier parameters state-values)
(define return-included? #t)
message-body ...) ...
(define-syntax-rule (return value)
(begin (set! return-included? value) ; 'return-included?' is undefined
(displayln "i should return a value!")))
或者我是否可以在扩展方法主体的宏中使用宏来做一些花哨的事情,而不是为 return 语句使用单独的宏?
谢谢
【问题讨论】: