Scala 一些冗余协方差

Scala Some redundant covariance

Scala 标准库包含 Option 类型。
Option 类型本身是协变类型,这一点从它的声明 sealed abstract class Option[+A].

可以看出

问题是:
为什么它的构造函数 Some 也是协变的 final case class Some[+A](x: A) extends Option[A]?
这是模式匹配所必需的吗?
或者可能是为了更好的可读性?

对我来说,这似乎是多余的,因为除了模式匹配之外,我看不出有任何理由直接在任何地方使用 Some,但目前我看不出它如何依赖于协方差。

首先,您必须明白,正如@Dima 所说,Some[T] 不是构造函数,而是 Option[T].

的子class

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

Some[Dog]Some[Animal] 吗?我想你会同意答案是肯定的。

实际上,它不会有太大变化,因为你很少使用 Some[Dog],而是使用 Option[Dog],但它可能会发生(比如当你使用 unapply 的案例 class 其签名 returns a Some[Tuple]),那么为什么不在我们处理它时添加方差?