Я хочу создать макрос, который при использовании в определении класса создает поле, его общедоступный установщик и аннотацию. Однако может показаться, что макрос не расширяется, главным образом потому, что он используется внутри другого макроса (определение класса).
Вот пример того, как определить класс с одним полем:
(define-simple-class test-class ()
(foo :: java.util.List ))
Мой макрос (только определяет поле на данный момент):
(define-syntax autowire
(syntax-rules ()
((autowire class id)
(id :: class))))
Однако, если я попытаюсь его использовать:
(define-simple-class test-class ()
(autowire java.util.List foo))
и запрос полей нового класса с помощью отражения, я вижу, что он создает поле с именем autowire
, а foo
нигде не видно. Похоже, проблема порядка, в котором макросы раскрываются.