Scala getClass思考

时间:2014-09-06 21:28:41

标签: scala scala-2.10

我有一个Scala列表,我可以从中获得以下输出对(Scala 2.10):

println(myList.getClass)`
// class scala.collection.immutable.$colon$colon

println(myList) 
// List(1, 2, 3,....)

请你解释一下:

  1. $ colon $ colon是什么意思

  2. 为什么不从getClass派生的输出表明这是一个List,而不仅仅是一些集合?

1 个答案:

答案 0 :(得分:2)

首先,$colon$colon是类::中对JVM友好(但不是人类友好)的编码。回想一下,空列表是单例Nil,非空列表是::(读"缺点"),带有头(是一个元素)和一个尾巴(这又是一个清单)。 因此,非空列表始终是此类::的实例。但是编译器将其重命名为$colon$colon,以使JVM感到高兴。

我不确定我理解你的第二个问题。 println(myList)的输出只是重定向到toString()的方法List,它(通过一些更多的间接)打印字符串"List",然后是括号中的元素。这就是全部。