如何指定多个类的宏注释扩展的顺序?

时间:2014-05-07 07:11:18

标签: scala annotations scala-macros scala-macro-paradise

假设我有两个带有宏注释的类,并且在扩展期间定义了它们的字段后,一个依赖于另一个:

@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首先展开,因此编译失败。

在这种情况下,什么决定了宏扩张的顺序?有没有办法强制执行所需的订单?

感谢您的意见,

儒略

1 个答案:

答案 0 :(得分:1)

read.table是我的解决方案。

如果在扩展宏之前在编译时反射中使用了类型A(A' s tree.tpe),它可以在偶然发现时立即展开:

typecheck