scala标准库包含 Option
类型。
选项类型本身是协变量类型,从其声明sealed abstract class Option[+A]
。
问题是:
为什么其构造函数Some
也是协变量的 final case class Some[+A](x: A) extends Option[A]
?
图案匹配需要以某种方式吗?
或者也许是为了更好的可读性而完成?
对我来说,这似乎是多余的,因为除了模式匹配以外,我没有任何理由直接使用Some
,但是目前我看不到它如何取决于协方差。
首先,您必须了解,正如@dima所说,Some[T]
不是构造函数,而是Option[T]
的子类。
一旦我们确定了这一点,使用Dog
和Animal
的问题总是更容易解决的问题:
Some[Dog]
是Some[Animal]
吗?我认为您会同意答案是肯定的。
务实地,它不会改变太大,因为您很少与Some[Dog]
一起使用,而是与Option[Dog]
一起使用,但可能会发生(例如,当您使用签名签名返回Some[Tuple]
的案例类的unapply
时(,那么为什么我们不添加差异?