2016-03-22 7 views
0

はREPLなぜ `.split`機能ごとに異なる振る舞いをREPLとScalaのコンパイラであり

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) 

[Ljava.lang.String;@5ebec15 

私は両方が

私はワークシートに次のを試してみましたが、私は何の違いを見ていない何か

+0

での議論を参照してくださいあなたは行方不明http://stackoverflow.com/q/3328085/1296806またはhttp://stackoverflow.com/q/17634427/1296806 –

答えて

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関数に配列を渡すときです。

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オブジェクトまたはケースオブジェクトの場合しかし、配列に関しては、よりスマートになり、配列の内容を実際に印刷します。

+0

あなたは私がどのようにしています知っているだろうarrayがREPLと同じであるというprintlnの結果は? – Kevin

+0

あなたは何を意味するのかよく分かりません。 – pedrofurla

0

あなたの後続質問については、REPLと全く同じ出力ではありませんが、以下の2つの方法で配列の要素が出力されます。また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) 
関連する問題