私は(ここから)Scalaメタデータを取得するためにエクストラクターを使用することを学びました。私も気づきましたUniverse.MethodTypeExtractor
:
作成するエクストラクタクラスと構文とのパターンマッチング
MethodType(params, respte)
ここで、paramsはメソッドのパラメータシンボルの空の可能性のあるリストであり、restpeはメソッドの結果タイプです。
素晴らしい!私が欲しいもののように聞こえます!(?)
しかし、どのように取得するのMethodType
ですか?(そして、なぜこれは、メソッド「Def」または「Ref」とは対照的に、メソッド「type」(メソッド「types」ですか?)のエクストラクタですか?)
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) [...]
それとも、いわば完全に「間違った木を吠えている」のでしょうか。