【问题标题】:What is the difference between Any and _ [duplicate]Any和_有什么区别[重复]
【发布时间】:2018-10-10 16:33:22
【问题描述】:

我目前正在学习 Scala 并解决 99 个问题 (http://aperiodic.net/phil/scala/s-99/)它给P07(http://aperiodic.net/phil/scala/s-99/p07.scala)的解决方案如图:

def flatten(list: List[Any]): List[Any] = list.flatMap {
  case ms: List[_] => flatten(ms)
  case e => List(e)
}

但是当我将_ 更改为Any 或其他方式时,结果似乎没有任何区别。因此,我质疑有什么区别以及他们为什么这样做。

【问题讨论】:

  • List 是协变的,所以任何List 都是List[Any]。所以在这种特殊情况下,List[_]List[Any] 都是“我不在乎元素类型是什么”的两种说法。在其他情况下,类型参数是_ 还是Any 可能非常重要,例如Set 是不变的,所以Set[Any] 表示一组Anys,而Set[_] 表示一组某种类型,也许是非常具体的类型,但我不知道也不关心那是什么类型。示例:Set[Int] 符合 Set[_] 但不符合 Set[Any]

标签: scala


【解决方案1】:

简而言之,Any 是一个类,就像 Java 中的一个对象。 _就像一个通配符,用来缩写事物。在大多数情况下,它的工作方式非常相似,但是当您考虑例如List[Any] 时,您会得到一个anything 列表,但如果您有一个List[_],您'会得到一个你不知道的列表,它可能是什么都没有

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2019-06-07
    • 2015-07-12
    • 2019-11-19
    • 2022-12-03
    • 1970-01-01
    • 2018-07-16
    • 2020-05-10
    相关资源
    最近更新 更多