来自对象的奇怪类名的含义

时间:2012-11-01 19:56:09

标签: scala

object Initialization {

  def main(args: Array[String]): Unit = {

    val list = Traversable(1,2,4,5)

    //list.foreach(println)

    println( list.getClass.getSimpleName )

  }

}

它会打印$colon$colon,但我期待List之类的内容。这个晦涩难懂的名字是什么意思?

1 个答案:

答案 0 :(得分:6)

那是因为List是一个密封的超类,它超过了案例类::和对象Nil(请参阅List文档下的已知子类部分)。 ::发音为 cons ,以大多数传统函数式编程语言中的list cons运算符命名。

由于您的列表头实际上是 ::案例类的实例,并且Scala使用名称修改来表示JVM上的非字类名称,因此您最终得到{{ 1}}当你使用反射得到名字时。

更新:我不确定您要使用的是哪个类名,但您可能可以使用stringPrefix。它定义为扩展GenTraversableLike的任何内容,这几乎是每个Scala集合类型。

如果您尝试使用类名进行控制流程,则应该尝试其他方法。模式匹配可以很好地工作,例如:

$colon$colon