次の型とメソッドが存在すると仮定します。
trait X[A <: X[A]]
case class C extends X[C]
def m(x: PartialFunction[X[_], Boolean])
に渡される PartialFunction を作成できるようにしたいm
。
最初の試みは書くことです
val f: PartialFunction[X[_], Boolean] = {
case c: C => true
}
m(f)
これは で失敗しtype arguments [_$1] do not conform to trait X's type parameter bounds [A <: X[A]]
ます。X
したがって、の型パラメーターを制約する必要があるようです。
2 回目の試行:
val f: PartialFunction[{type A <: X[A]}, Boolean] = {
case c: C => true
}
m(f)
これは falseであるm
ため、適用時に失敗します。PartialFunction[AnyRef{type A <: X[this.A]},Boolean] <: PartialFunction[X[_],Boolean]
部分関数の定義との適用の両方でコンパイラを実際に満足させるキャストを含まない方法はありますm
か?