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
之类的内容。这个晦涩难懂的名字是什么意思?
答案 0 :(得分:6)
那是因为List
是一个密封的超类,它超过了案例类::
和对象Nil
(请参阅List文档下的已知子类部分)。 ::
发音为 cons ,以大多数传统函数式编程语言中的list cons运算符命名。
由于您的列表头实际上是 ::
案例类的实例,并且Scala使用名称修改来表示JVM上的非字类名称,因此您最终得到{{ 1}}当你使用反射得到名字时。
更新:我不确定您要使用的是哪个类名,但您可能可以使用stringPrefix
。它定义为扩展GenTraversableLike
的任何内容,这几乎是每个Scala集合类型。
如果您尝试使用类名进行控制流程,则应该尝试其他方法。模式匹配可以很好地工作,例如:
$colon$colon