Scala标准库包含Option
类型。
选项类型本身是协变类型,这从它的声明sealed abstract class Option[+A]
明显可见。
Scala一些冗余协方差
的问题是:
为什么它的构造Some
也是协变 final case class Some[+A](x: A) extends Option[A]
?
这是模式匹配需要吗?
或者也许这是为了更好的可读性?
对我来说似乎是多余的,因为我没有看到任何理由使用Some
直接在任何地方,除了模式匹配,但目前我看不出它如何依赖于协方差。
它不是_constructor_,它是协变的。这是实际的_class_“一些”。 如果它不是协变的,那么'Some(“foo”)'不会是'Some(new Object)'的子类。 – Dima
@Dima我觉得这很容易混淆,因为'Some(“foo”)'和'Some(new Object)'实际上并不是类......但的确,“Some [String]”是一个子类型'有些[AnyRef]'。 –
@Dima我的意思是代数数据类型的数据构造函数。 –