我是Scala的新手。我注意到List
和scala
都存在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
会给出不同的结果,如上所示?
如果不是,有什么区别?
谢谢!
答案 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.List
是scala.collection.immutable.List
package scala
type List[+A] = scala.collection.immutable.List[A]
默认情况下,package
scala
下的任何内容均无法显式导入。
由于List
是广泛使用的东西,如果它在上下文中默认可用而不是importing
,那么它就非常有意义。这就是为什么scala.collection.immutable.List
的类型别名在包scala中。
typeOf
默认情况下必须显示更高的偏好包。