在REPL中考虑以下内容
scala> val a = "1 2 3"
a: String = 1 2 3
scala> a.split(" ")
res0: Array[String] = Array(1, 2, 3)
在编译器中考虑以下内容
val s = readLine()
println(s.split(" ")) // outputs [Ljava.lang.String;@5ebec15
println(s.toList) // outputs List(1, , 2, , 3)
为什么同一功能有不同的输出,即
Array(1, 2, 3)
vs
[Ljava.lang.String;@5ebec15
我认为两者都有相同的输出
我错过了什么
答案 0 :(得分:3)
repl输出与println
输出不同。 println
输出.toString
:
scala> val a = "1 2 3"
a: String = 1 2 3
scala> a.split(" ").toString
res0: String = [Ljava.lang.String;@5f84486a
在某些情况下,repl会打印出.toString
,例如。当对象是List或case对象时。但是当涉及到阵列时,它会更智能并实际打印阵列的内容。
答案 1 :(得分:0)
我在工作表中尝试了以下内容,但没有区别。
val s = "1 2 3" //> s : String = 1 2 3
s.split(" ") //> res0: Array[String] = Array(1, 2, 3)
println(s.toList) //> List(1, , 2, , 3)
在两种情况下,s.split
的返回都是一个数组。当你将数组传递给println
函数时,它会输出一个实际上正确的字符串。
答案 2 :(得分:0)
关于您的后续问题,与REPL的输出不完全相同,但以下两种方法将打印数组的元素。另请参阅Printing array in Scala
中的讨论scala> val a = "1 2 3"
a: String = 1 2 3
scala> println(a.split(" ")) // outputs a.split(" ").toString
[Ljava.lang.String;@5fd62371
scala> println(runtime.ScalaRunTime.stringOf(a.split(" ")))
Array(1, 2, 3)
scala> println(a.split(" ").deep)
Array(1, 2, 3)