Scala一些冗余协方差

cunj1qz1  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(178)

Scala标准库包含Option类型。
选项类型本身是协变类型,从其声明sealed abstract class Option[+A]可以明显看出这一点。
问题是:
为什么它的构造函数Some也是协变的final case class Some[+A](x: A) extends Option[A]
这是模式匹配所需要的吗?
或者,这样做可能是为了更好的可读性?
对我来说,这似乎是多余的,因为我认为除了模式匹配之外,没有任何理由在任何地方直接使用Some,但目前我看不出它如何依赖于协方差。

bvjxkvbb

bvjxkvbb1#

首先,您必须理解,正如@Dima所说,Some[T]不是构造函数,而是Option[T]的子类。
一旦我们确定了这一点,用DogAnimal解决有差异的问题总是更容易:
Some[Dog]Some[Animal]吗?我想你会同意答案是肯定的。
实际上,它不会有太大变化,因为您很少使用Some[Dog],而是使用Option[Dog],但它可能会发生(例如,当您使用签名返回Some[Tuple]的Case类的unapply时),那么为什么不在我们处理它的时候添加方差呢?

相关问题