【发布时间】:2017-06-01 13:39:13
【问题描述】:
Scala 标准库包含Option 类型。
Option 类型本身是协变类型,这从它的声明sealed abstract class Option[+A] 中很明显。
问题是:
为什么它的构造函数Some也是协变的
final case class Some[+A](x: A) extends Option[A]?
模式匹配是否需要这种方式?
或者可能是为了提高可读性?
对我来说,这似乎是多余的,因为除了模式匹配之外,我没有任何理由直接在任何地方使用 Some,但目前我看不出它如何依赖协方差。
【问题讨论】:
-
不是构造函数,而是协变的。这是实际的 class
Some。如果它不是协变的,那么Some("foo")就不会是Some(new Object)的子类。 -
@Dima 我觉得这很令人困惑,因为
Some("foo")和Some(new Object)实际上不是类......但事实上,Some[String]是Some[AnyRef]的子类型是有道理的。 -
@Dima 我的意思是代数数据类型的数据构造函数。
标签: scala pattern-matching option covariance algebraic-data-types