4
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必须这样做的原因吗?

4

2 回答 2

7

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

scala> runtime.ScalaRunTime.stringOf(Array(1, 2, 3))
res3: String = Array(1, 2, 3)
于 2013-09-11T15:41:39.813 回答
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

List并且Vector是 Scala 类,所以它们有一个很好的表示。Array来自Java,践行了Java的丑陋。

于 2013-09-11T15:42:26.760 回答