小编Tom*_*zoe的帖子

嵌套的隐式宏似乎不适用于类型参数?

我正在编写一个Scala隐式宏,它自动为case类生成一个类型类(使用quasiquote,Scala 2.10.3都带有宏天堂编译器插件和Scala 2.11.0-M7).

隐式宏以递归方式查找参数的类型类.

只要case类不接受类型参数或者在生​​成的代码中没有使用类型参数,它就可以正常工作.

但是一旦需要隐式值,<TypeClass>[<TypeParameter of case class>]调用站点的编译就会失败,并且"找不到参数e的隐含值".

以下是重现问题的代码:

trait TestTypeClass[A] {
  def str(x: A): String
}
object Test {
  implicit def BooleanTest = new TestTypeClass[Boolean] {
    def str(x: Boolean) = x.toString
  }
  def CaseClassTestImpl[A: c.WeakTypeTag](c: Context): c.Expr[TestTypeClass[A]] = {
    import c.universe._
    val aType = weakTypeOf[A]
    val TestTypeClassType = weakTypeOf[TestTypeClass[_]]
    val typeName = aType.typeSymbol.name.decoded
    val params = aType.declarations.collectFirst { case m: MethodSymbol if m.isPrimaryConstructor => m }.get.paramss.head
    val paramTypes = aType.declarations.collectFirst { case m: MethodSymbol if m.isPrimaryConstructor …
Run Code Online (Sandbox Code Playgroud)

macros scala

10
推荐指数
1
解决办法
1104
查看次数

标签 统计

macros ×1

scala ×1