Macros 方案(Kawa)-如何在另一个宏中强制宏扩展
我想制作一个宏,当在类定义中使用它时,会创建一个字段、一个公共setter和一个注释。然而,宏似乎没有扩展,主要是因为它在其他(类定义)宏中使用 下面是一个示例,说明如何使用一个字段定义类:Macros 方案(Kawa)-如何在另一个宏中强制宏扩展,macros,scheme,lisp,kawa,Macros,Scheme,Lisp,Kawa,我想制作一个宏,当在类定义中使用它时,会创建一个字段、一个公共setter和一个注释。然而,宏似乎没有扩展,主要是因为它在其他(类定义)宏中使用 下面是一个示例,说明如何使用一个字段定义类: (define-simple-class test-class () (foo :: java.util.List )) 我的宏(目前仅定义字段): 但是,如果我尝试使用它: (define-simple-class test-class () (autowire java.util.Li
(define-simple-class test-class ()
(foo :: java.util.List ))
我的宏(目前仅定义字段):
但是,如果我尝试使用它:
(define-simple-class test-class ()
(autowire java.util.List foo))
通过反射查询新类的字段,我可以看到它创建了一个名为
autowire
的字段,而foo
则不见踪影。看起来像是宏展开顺序的问题。是的,宏是“从外到内”展开的。展开define simple class
后,子表单(autowire java.util.List foo)
不再存在
如果需要这种行为修改,则需要定义自己的define not some simple class
宏,该宏可能会扩展为define simple class
形式
然而,在对标准的东西进行如此细微的调整之前,请后退一步,问问自己是否值得。好的方面可能是语法与您的思维方式更为一致,但坏的方面可能是语法与其他人的思维方式更为一致(他们可能需要理解您的代码)。对于可维护和可读的编码有一条格言:“保持常规”。简而言之,没有简单的方法可以做到这一点?考虑到我选择lisp主要是因为承诺消除样板文件,这真是一个糟糕的选择
(define-simple-class test-class ()
(autowire java.util.List foo))