假设我有两个带有宏注释的类,并且在扩展期间定义了它们的字段后,一个依赖于另一个:
@Annotation
case class A(i: Int)
@Annotation
case class B(a: A)
我需要在A
之前展开B
,但其定义的顺序并不能确保这一点。
例如,对B
的引用作为不相关编译单元中对象的类型参数,例如:
class X{val b = B(A(1))}
在一个文件中,class Y{Z[B]}
在另一个文件中,
导致B
首先展开,因此编译失败。
在这种情况下,什么决定了宏扩张的顺序?有没有办法强制执行所需的订单?
感谢您的意见,
儒略
答案 0 :(得分:1)
read.table
是我的解决方案。
如果在扩展宏之前在编译时反射中使用了类型A(A' s tree.tpe),它可以在偶然发现时立即展开:
typecheck