首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案(Kawa) -如何在另一个宏中强制宏扩展

方案(Kawa) -如何在另一个宏中强制宏扩展
EN

Stack Overflow用户
提问于 2018-08-25 16:22:18
回答 1查看 165关注 0票数 1

我想要创建一个宏,在类定义中使用这个宏可以创建一个字段、一个公共设置器和一个注释。但是,宏似乎没有扩展,主要是因为它在其他宏(类定义)中使用。

下面是一个示例,说明如何用一个字段定义类:

代码语言:javascript
复制
(define-simple-class test-class ()
    (foo :: java.util.List ))

我的宏(目前只定义字段):

代码语言:javascript
复制
(define-syntax autowire
  (syntax-rules ()
    ((autowire class id) 
            (id :: class))))

然而,如果我尝试使用它:

代码语言:javascript
复制
(define-simple-class test-class ()
    (autowire java.util.List foo))

通过反射查询新类的字段,我可以看到它创建了一个名为autowire的字段,而foo在任何地方都看不到。看起来是宏展开顺序的一个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-25 22:23:24

是的,宏是从外部展开的。扩展define-simple-class后,子表单(autowire java.util.List foo)不再存在。

如果您希望进行这种行为修改,则需要定义自己的define-not-so-simple-class宏,该宏可能展开为define-simple-class窗体。

然而,在对一些标准的东西做如此小的调整之前,请退后一步,问问自己这是否值得。它的优点可能是与您的想法稍微一致的语法,但缺点是它可能与其他人的想法(可能需要理解您的代码)的方式更差。对于可维护和可读的编码,有一条格言:“保持常规”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52019144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档