パス依存型とパターン マッチングに問題があります。
trait View[A]
trait Foo {
type Bar
def defaultBar: Bar
}
trait Baz extends Foo {
def view(init: Bar): View[Bar]
}
trait Test {
val foo: Foo
def bar: foo.Bar = foo.defaultBar
def test(): Option[View[foo.Bar]] =
foo match {
case b: Baz => Some(b.view(bar))
case _ => None
}
}
scalac が と識別されないため、これは失敗foo
しb
ます。その結果、次の 2 つのキャストでのみ機能します。
case b: Baz => Some(b.view(bar.asInstanceOf[b.Bar]).asInstanceOf[View[foo.Bar]])
確かに、キャストを回避するためのクリーンな方法が必要ですか?