マクロの一部として、ケース定義のパターンを検査する必要があります。
パターン変数の型、またはパターン全体を判別する方法はありますか?
ポリモーフィック クラスと、トランスフォーマーを使用して値Data
のパターンを検査および変換するマクロを考えてみましょう。Data
case class Data[A](x: String, data: A)
def macroImpl(c: Context)(...) = {
val transformer = new Transformer {
override def transformCaseDefs(trees: List[CaseDef]) = trees map {
case CaseDef(pattern, guard , body) => pattern match {
case pq"Data($string, $data)" => {
// What is the type of $data, i.e., how
// is the type parameter A instantiated?
...
}
}
}
}
...
transformer.transform(...)
}
パターン変数 $data の型を判別する方法、つまり、型パラメーター A がどのようにインスタンス化されたかを判別する方法はありますか?
別の質問では、値のツリーに関するこの問題について説明し、関数の使用を提案していc.typeCheck
ます。残念ながら、上記の例のパターン ツリーにメソッドを適用すると、typeCheck
メソッドが a をスローするため、これはパターンに対しては機能しないようです。TypeCheckException