我有一个Scala列表,我可以从中获得以下输出对(Scala 2.10):
println(myList.getClass)`
// class scala.collection.immutable.$colon$colon
println(myList)
// List(1, 2, 3,....)
请你解释一下:
$ colon $ colon是什么意思
为什么不从getClass派生的输出表明这是一个List,而不仅仅是一些集合?
答案 0 :(得分:2)
首先,$colon$colon
是类::
中对JVM友好(但不是人类友好)的编码。回想一下,空列表是单例Nil
,非空列表是::
(读"缺点"),带有头(是一个元素)和一个尾巴(这又是一个清单)。
因此,非空列表始终是此类::
的实例。但是编译器将其重命名为$colon$colon
,以使JVM感到高兴。
我不确定我理解你的第二个问题。 println(myList)
的输出只是重定向到toString()
的方法List
,它(通过一些更多的间接)打印字符串"List"
,然后是括号中的元素。这就是全部。