【问题标题】:What does [+A] mean in Scala class declaration? [duplicate]Scala 类声明中的 [+A] 是什么意思? [复制]
【发布时间】:2015-06-07 09:39:39
【问题描述】:

在 scala 中 Option 类声明为

  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 上找不到答案。

【问题讨论】:

  • 这些是差异注释。根据经验,您应该花一些时间掌握语言的窍门,然后再急于使用 SO。这个网站 (stackoverflow.com/tags/scala/info) 上的 scala 信息页面有很多指向学习材料的指针。关于差异,请参见示例artima.com/pins1ed/type-parameterization.html
  • @EndeNeu 是的,问题的内容是相似的......但是如果你不知道什么是“协方差”,你永远找不到正确的答案。
  • 这是一个很好的观点。这就是为什么您需要先花一些时间在一些学习材料上(即使只是略读一下)。

标签: scala types


【解决方案1】:

它在其泛型参数中将类声明为协变。对于您的示例,如果TS 的子类型,则意味着Option[T]Option[S] 的子类型。因此,例如,Option[String]Option[Object] 的子类型,您可以这样做:

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

相反,如果一个类被声明为-A,则它的泛型参数可以是逆变

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2014-01-16
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多