我使用Macro Paradise在Scala 2.10.3上。我在那里我想一个特征添加到对象宏注释,如:使用scala宏注释将额外特征添加到对象
@MyAnnotation
object Foo extends Bar {}
扩张后,我想是这样的:
object Foo extends Bar with Baz {}
凡Baz
是在编译的性状访问范围。使用微距天堂,我可以清晰地解构我的目标树:
q"object $obj extends ..$bases { ..$body }" = tree
其中基地拥有订货号(newTypeName(“酒吧”))的形式列出
我只需要添加一个额外的Baz
进入现有的扩展基地和重建树,问题是目标可能“已经”包含Baz
。在这种情况下,我不想添加它。给我的名字缩短了。有没有方法将它们转换为宏内的实际类型引用?
我试图在宏观以下几点:c.typeCheck(Ident(newTypeName("Baz")))
,但我得到了以下错误:
scala.reflect.macros.TypeCheckException: trait some.Baz is not a value
我已经通过的背景下审视,看是否使用那里有其他任何明显的方法,但没有跳出。
任何帮助表示赞赏!
所以在我的例子中,对象Foo在另一个对象内部,让我们说叫外部对象。当我尝试c.typeCheck(块(annottees.head.tree.duplicate))时,我得到一个非法的循环引用错误。它拉动包含的对象,因此再次拉动自己。 – user3293336
有没有使用当前的上下文来解决巴兹some.Baz的方式?根据返回的错误判断,它必须在内部进行。 – user3293336
你可以在github上发布你的代码示例吗?我会尽力帮忙。 –