IntelliJ Community Edition 2016 Scala工作表显示奇怪的输出而不是文字值

时间:2016-09-27 05:00:39

标签: scala intellij-idea intellij-16

我在InteliJ中使用过scala工作表并遇到了一个问题,即右侧(类似REPL的输出)显示的是名称空间或内存地址,而不是有用的人类字面值。

在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

1 个答案:

答案 0 :(得分:3)

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

以下是toString的{​​{1}}方法:

Object
另一方面,Scala的REPL对某些类具有特殊逻辑,其中toString

没有什么可以“修复”,只是这些工具的设计方式。如果您想在Idea的工作表中打印Array的值,请使用public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 或将值转换为另一个集合:

Array

产地:

java.util.Arrays.toString