【发布时间】: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