IntelliJ Community Edition 2016 Scala Worksheet 显示奇​​怪的输出而不是文字值

IntelliJ Community Edition 2016 Scala Worksheet shows strange output instead of literal value

我在 InteliJ 中使用了 scala 工作表 运行 遇到一个问题,其中右侧(类似 REPL 的输出)显示的似乎是名称空间或内存地址,而不是有用的-to-a-human 文字值。

在 scala REPL(不是 IntelliJ)中,下面的内容非常合理

scala> val nums = new Array[Int](10)
nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

但是,在 Scala 工作表中,同样会产生不太有用的输出

nums: Array[Int] = [I@1a2a52bf

经过简单的谷歌搜索和阅读后,我尝试了以下方法

val nums = new Array[Int](10)
nums
nums.toString()
nums.mkString(", ")

哪个输出

nums: Array[Int] = [I@1a2a52bf
res0: Array[Int] = [I@1a2a52bf
res1: String = [I@1a2a52bf
res2: String = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

我缺少一个简单的解决方案或解释。有没有人运行之前解决过这个问题并修复过它?

这里有一张工作表截图供参考:

screenshot

IntelliJ 的工作表使用 toString 打印变量。 Scala 中的 Array[Int] 对应于 Java 的 int[],它不会覆盖 ObjecttoString 方法。

这是ObjecttoString方法:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

而Scala的REPL对其中的某些类、Array有特殊的逻辑

"fix" 没有什么可说的,这只是这些工具的设计方式。如果你想在 Idea 的工作表中漂亮地打印 Array 的值,请使用 java.util.Arrays.toString 或将值转换为另一个集合:

val a = Array(1,2,3)
a.toString
java.util.Arrays.toString(a)
a.toSeq

产生:

a: Array[Int] = [I@4df3d702
res0: String = [I@4df3d702
res1: String = [1, 2, 3]
res2: Seq[Int] = WrappedArray(1, 2, 3)