Scala一些冗余协方差



scala标准库包含 Option类型。
选项类型本身是协变量类型,从其声明sealed abstract class Option[+A]

很明显

问题是:
为什么其构造函数Some也是协变量的 final case class Some[+A](x: A) extends Option[A]
图案匹配需要以某种方式吗?
或者也许是为了更好的可读性而完成?

对我来说,这似乎是多余的,因为除了模式匹配以外,我没有任何理由直接使用Some,但是目前我看不到它如何取决于协方差。

首先,您必须了解,正如@dima所说,Some[T]不是构造函数,而是Option[T]的子类。

一旦我们确定了这一点,使用DogAnimal的问题总是更容易解决的问题:

Some[Dog]Some[Animal]吗?我认为您会同意答案是肯定的。

务实地,它不会改变太大,因为您很少与Some[Dog]一起使用,而是与Option[Dog]一起使用,但可能会发生(例如,当您使用签名签名返回Some[Tuple]的案例类的unapply时(,那么为什么我们不添加差异?

最新更新