私が持っていると言う
trait Foo[T] { def bar: Bar[T] }
bar
そして、 a で呼び出されたときFoo[Int]
(つまりBar[Int]
、この場合) の型タグFoo[Int]
と名前から の戻り値の型を取得したい"bar"
(オーバーロードがないと仮定するか、それらを区別することができます)。これはscala-reflectで行うことができますか?
私が持っていると言う
trait Foo[T] { def bar: Bar[T] }
bar
そして、 a で呼び出されたときFoo[Int]
(つまりBar[Int]
、この場合) の型タグFoo[Int]
と名前から の戻り値の型を取得したい"bar"
(オーバーロードがないと仮定するか、それらを区別することができます)。これはscala-reflectで行うことができますか?
これはあなたが望むものに近いですか(を使用してasSeenFrom
)?
val tt = typeTag[Foo[Int]]
scala> tt.tpe
.members
.find(_.name.toString == "bar").get
.asMethod
.returnType
.asSeenFrom(tt.tpe, tt.tpe.typeSymbol)
res68: reflect.runtime.universe.Type = Bar[Int]
もちろん、私は型安全性を窓の外に投げ出しました。少し良い:
scala> tt.tpe
.members
.find(_.name.toString == "bar")
.filter(_.isMethod)
.map(_.asMethod.returnType.asSeenFrom(tt.tpe, tt.tpe.typeSymbol))
res74: Option[reflect.runtime.universe.Type] = Some(Bar[Int])