[+A] 在 Scala class 声明中意味着什么?

What does [+A] mean in Scala class declaration?

在 scala 中,选项 class 声明为

  sealed abstract class _Option[+A]

  case object _None extends _Option[Nothing] {}

  final case class _Some[+A](x: A) extends _Option[A] {}

什么是[+A]?为什么不只是 [A]?可以是 [-A] 吗?

抱歉,如果它是重复的,但我找不到关于 SO 的答案。

它在其通用参数中声明 class 是 协变的 。对于您的示例,这意味着如果 TS 的子类型,则 Option[T]Option[S] 的子类型。因此,例如,Option[String]Option[Object] 的子类型,允许您执行:

val x: Option[String] = Some("a")
val y: Option[Object] = x

相反,如果 class 被声明为 -A,则其泛型参数可以 逆变

阅读文档中 Scala 的上述差异 here