我(从这里)学会了使用提取器来获取 Scala 元数据。我还注意到Universe.MethodTypeExtractor
:
用于创建和模式匹配语法的提取器类在
MethodType(params, respte)
这里,params 是方法的参数符号的潜在空列表,restpe 是方法的结果类型。
伟大的!听起来像我想要的!(?)
但是如何获得MethodType
?(为什么这是方法“类型”的提取器(方法是“类型”?)而不是方法“Def”或“Ref”??)
scala> typeOf[List[Int]].member(newTermName("head"))
res2: reflect.runtime.universe.Symbol = method head
scala> res2 match { case MethodType(a, b) => println((a, b)) }
scala.MatchError: method head (of class scala.reflect.internal.Symbols$MethodSymbol) [...]
scala> res2.asType match { case MethodType(a, b) => println((a, b)) }
scala.ScalaReflectionException: method head is not a type [...]
scala> res2.asTerm match { case MethodType(a, b) => println((a, b)) }
scala.MatchError: method head (of class scala.reflect.internal.Symbols$MethodSymbol) [...]
scala> res2.asMethod match { case MethodType(a, b) => println((a, b)) }
scala.MatchError: method head (of class scala.reflect.internal.Symbols$MethodSymbol) [...]
或者我完全是“找错了树”,可以这么说?