[英]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]
的子类。
一旦我们确定了这一点,使用Dog
和Animal
解决具有方差的问题总是更容易:
Some[Dog]
是Some[Animal]
吗? 我想你会同意答案是肯定的。
务实地说,它不会有太大变化,因为您很少使用Some[Dog]
,而是使用Option[Dog]
,但它可能会发生(例如,当您使用不适用的情况下unapply
其签名返回Some[Tuple]
),那么为什么不在我们处理它的时候添加方差呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.