這就是這樣的情況:我有一個類定義,它的公共方法是使用宏定義的。該方法看起來是這樣的:動態地綁定一個變量內部的宏定義的類定義
<-- 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語句一個單獨的宏宏宏?
謝謝