sealed trait Foo {
type T <: Option[Any]
val x : T
}
case class Bar(x : Option[Int]) extends Foo {
type T = Option[Int]
}
val baz : Foo = Bar(Some(42))
baz.x match {
case Some(a) => a
case None => 1337
}
这是尝试模式匹配时的错误消息:
:12: error: pattern type is incompatible with expected type;
found : None.type
required: baz.T
我认为这是由于T型的类型擦除所致。
答案 0 :(得分:0)
我不确定为什么会失败,可能是类型推断的限制。以下作品:
__block
无论如何,要求(baz.x: Option[Any]) match {
case Some(a) => a
case None => 1337
}
的子类型没有意义。更好地定义选项的元素类型:
Option