我在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
必须有一个简单的解决方案或解释,我缺少。有没有人碰过这个并修复过它?
这是一个工作表截图供参考:
答案 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