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
的东西。这个不起眼的名字是什么意思? 最佳答案
这是因为 List
是一个密封的父类(super class),它覆盖了 case 类 ::
和对象 Nil
(请参阅 List 文档下的已知子类部分)。 ::
发音为 cons,以大多数传统函数式编程语言中的 list cons 运算符命名。
由于您的列表头实际上是 ::
案例类的实例,并且 Scala 使用名称修饰来表示 JVM 上的非单词类名称,因此当您使用反射获取名称时,您最终会得到 $colon$colon
。
更新: 我不太确定你想用类名做什么,但你可以改用 stringPrefix
。它是为扩展 GenTraversableLike
的任何东西定义的,它几乎适用于所有 Scala 集合类型。
如果您尝试使用类名进行控制流,您可能应该尝试其他方法。模式匹配会很好地工作,例如:
xs match {
list: List[_] => // do list stuff
set: Set[_] => // do set stuff
}
关于scala - 来自对象的奇怪类名的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13184531/