2
在下列情况下斯卡拉似乎不承认的system
类型:如果我不能完全糊涂模式匹配拒绝承认成员类型(X值不_2的成员)
sealed trait Bar[S] {
def system: S
}
trait Foo { def bar(): Unit }
trait FooBar extends Bar[Foo]
,这意味着,我应该能够做到以下几点:
def test(fb: FooBar) { fb.system.bar() } // ok, this works
但下列失败:
trait Test[S] {
val bar: Bar[S]
bar match {
case fb: FooBar => fb.system.bar() // error: value bar is not a member of _2
case _ =>
}
}
这是一个模式匹配器中的错误,还是我错过了一个关键位?
编辑:请注意,下面的工作:
trait Test[S] {
val bar: Bar[S]
bar match {
case fb: FooBar => (fb: FooBar).system.bar()
case _ =>
}
}
我想我应该提交一个bug?
'FooBar'是一个平面类型,所以擦除没有问题。另请注意,编译器接受我的类型注释'(fb:FooBar)',所以匹配大小写的类型肯定有些奇怪。 – 2013-05-11 22:16:28