scala.List和scala.collection.immutable.List之间的区别是什么?

时间:2016-09-19 08:54:16

标签: scala

我是Scala的新手。我注意到Listscala都存在scala.collection.immutable。一开始,我认为scala.List只是scala.collection.immutable.List的别名。但后来我发现:

scala> typeOf[scala.List[A]]
res1: reflect.runtime.universe.Type = scala.List[A]

scala> typeOf[scala.collection.immutable.List[A]]
res2: reflect.runtime.universe.Type = List[A]

如上所示,这两个typeof上的List会产生不同的结果,这让我对自己的判断感到怀疑。

我想知道: scala.List和scala.collection.immutable.List是一回事吗? 如果是,为什么typeOf会给出不同的结果,如上所示? 如果不是,有什么区别?

谢谢!

2 个答案:

答案 0 :(得分:2)

正如@Patryk在评论中提到的,它是scala.collection.immutable.List的别名。

如果你看scala\package.scala

  type List[+A] = scala.collection.immutable.List[A]
  val List = scala.collection.immutable.List

所以从根本上说它们是相同的:

scala> implicitly[scala.List[Int] =:= scala.collection.immutable.List[Int]]
res19: =:=[List[Int],List[Int]] = <function1>

scala> :type List
scala.collection.immutable.List.type

scala> :type scala.collection.immutable.List
collection.immutable.List.type

您使用的是我相信来自typeOf的{​​{1}}。这是类型参数的反射表示,因此它只给你import scala.reflect.runtime.universe._(在我看来这是正确的行为)

答案 1 :(得分:0)

scala.Listscala.collection.immutable.List

的类型别名
package scala

type List[+A] = scala.collection.immutable.List[A]

默认情况下,package scala下的任何内容均无法显式导入。

由于List是广泛使用的东西,如果它在上下文中默认可用而不是importing,那么它就非常有意义。这就是为什么scala.collection.immutable.List的类型别名在包scala中。

typeOf默认情况下必须显示更高的偏好包。