在宏中查找方法参数的实际类型

Mar*_*nek 1 scala scala-macros

假设我有一个宏实现

def testImpl[T](c:Context)(implicit wtt:c.WeakTypeTag[T]):c.Tree = {
    import c.universe._

    def info(msg: Any) = c.info(c.enclosingPosition, msg.toString, true)

    val parameter = wtt.tpe.member(TermName("f")).paramLists(0)(0)

    info(parameter.typeSignature)

    q"{}"
}
Run Code Online (Sandbox Code Playgroud)

和宏定义

def test[T]:Unit = macro DerivingImpl.testImpl[T]
Run Code Online (Sandbox Code Playgroud)

此宏f在其类型参数中查找函数,并打印有关其第一个参数类型的信息.

现在如果我像这样使用这个宏

trait Trait[A] {
    def f(x:A): Int
}

test[Trait[Int]]
Run Code Online (Sandbox Code Playgroud)

我被A打印了.我想得到Int.我理解调用member返回的方法符号没有关于具体应用类型的信息.那么,找到参数的实际类型的正确方法是什么?

谢谢.

Eug*_*ako 5

val f = wtt.tpe.member(TermName("f"))
val MethodType(parameter :: Nil, _) = f.typeSignatureIn(wtt.tpe)
info(parameter.typeSignature)
Run Code Online (Sandbox Code Playgroud)