2
リフレクションを使用して2つのタイプ間の '互換性'を比較する際に問題があります(実際にはマクロを書きます)。たとえば、Vector[Int] === List[Int]
を許可します。今私はgeneral approachを知っています。しかし問題は、この場合、型コンストラクタパラメータを取得できないことです。"洗練された"タイプのための適切な型のコンストラクタパラメータの取得
import scala.reflect._
import runtime.universe._
typeOf[List[Int]].typeArgs // List(Int) OK
typeOf[List[Int] with java.io.Serializable].typeArgs // List() FAIL
なぜこの問題が発生しますか?
test(List(1, 2, 3), List(1, 2, 3)) // List(Int)
をしかし、これはしていません::
def test[A, B >: A](a: A, b: B)(implicit tt: TypeTag[B]) = {
println(s"tt = $tt")
typeOf[B].typeArgs
}
は今、この作品
test(Vector(1, 2, 3), List(1, 2, 3)) // List()