Scala 宏类型参数自省 Case Class
Scala Macro Type Args Introspection on Case Class
我有一个库可以在编译时为案例 类 生成映射,它工作得很好,除非我传入一个泛型类型,例如:Foo[Bar]
(请参阅 https://github.com/outr/fabric/blob/master/core/shared/src/main/scala-2/fabric/rw/RWMacros.scala#L32).当我用 caseClass[Foo[Baz]]
调用宏时,typeSignature
表示 Bar
,而不是 Baz
。我可以在 tpe
中看到在编译时它是 Foo[Baz]
,但我不知道如何从 Bar
泛型映射到 Baz
在 typeArgs
列表中。
感谢@zygfryd Gitter.im!他将我指向 asSeenFrom
,我能够使用 val returnType = tpe.decl(name).typeSignature.asSeenFrom(tpe, tpe.typeSymbol.asClass)
更新代码,现在它正确解析为通用类型。
我有一个库可以在编译时为案例 类 生成映射,它工作得很好,除非我传入一个泛型类型,例如:Foo[Bar]
(请参阅 https://github.com/outr/fabric/blob/master/core/shared/src/main/scala-2/fabric/rw/RWMacros.scala#L32).当我用 caseClass[Foo[Baz]]
调用宏时,typeSignature
表示 Bar
,而不是 Baz
。我可以在 tpe
中看到在编译时它是 Foo[Baz]
,但我不知道如何从 Bar
泛型映射到 Baz
在 typeArgs
列表中。
感谢@zygfryd Gitter.im!他将我指向 asSeenFrom
,我能够使用 val returnType = tpe.decl(name).typeSignature.asSeenFrom(tpe, tpe.typeSymbol.asClass)
更新代码,现在它正确解析为通用类型。