为什么List.toString和Vector.toString返回一个很好的表示而不是Array.toString?

时间:2013-09-11 15:33:42

标签: scala

scala> Array(1, 2, 3).toString
res1: String = [I@11cf437c

scala> List(1, 2, 3).toString
res2: String = List(1, 2, 3)

scala> Vector(1, 2, 3).toString
res3: String = Vector(1, 2, 3)

逻辑上,人们希望Array(1, 2, 3).toString返回"Array(1, 2, 3)"

更新:在我看来像Array映射到内置的Java数组类型 - 这是正确的吗?如果是,这是Array.toString必须表现得像这样的原因吗?

2 个答案:

答案 0 :(得分:7)

这是因为Array是一个Java对象。但是,如果符合您的需要,您可以使用runtime.ScalaRunTime.stringOf

scala> runtime.ScalaRunTime.stringOf(Array(1, 2, 3))
res3: String = Array(1, 2, 3)

答案 1 :(得分:2)

scala> List(1,2,3).getClass()
    res0: Class[_ <: List[Int]] = class scala.collection.immutable.$colon$colon

scala> Vector(1,2,3).getClass()
    res1: Class[_ <: scala.collection.immutable.Vector[Int]] = class scala.collection.immutable.Vector

scala> Array(1,2,3).getClass()
    res2: Class[_ <: Array[Int]] = class [I

ListVector是Scala类,因此它们具有良好的表示形式。 Array来自Java并实践Java的丑陋。