2016-09-27 6 views
0

私はInteliJでscalaワークシートを使用しましたが、右側(REPL風の出力)有用な人間のリテラル値ではなく、メモリアドレスを使用します。 ScalaでIntelliJ Community Edition 2016 Scala Worksheetは、リテラル値の代わりに奇妙な出力を表示します

REPL(IntelliJのではないが)以下しかし、Scalaでいくつかの光後に同じ収量それほど有用ではない出力

nums: Array[Int] = [[email protected] 

ワークシート

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

非常に健全ですグーグルと読書私は以下を試した:

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

どの出力

nums: Array[Int] = [[email protected] 
res0: Array[Int] = [[email protected] 
res1: String = [[email protected] 
res2: String = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 

私には欠けている簡単な解決策や説明が必要です。誰かがこれを横切って走り、前にそれを修正しましたか?ここで

は参照用のワークシートのスクリーンショットです:

screenshot

+0

出力はのIntelliJ 2016年1月4日に私のために正しいです。特にcat/shapelessのようなライブラリを使用したり、スコープに関連したいくつかのケースを試したりするとき、Intellijワークシートは常にスカラREPLといくつかの矛盾します。 –

+0

しかし、私はあなたのintellij scalacのバージョンを確認する方が良いでしょう、あなたのケースでもっと重要であるはずです。 –

答えて

3

のIntelliJのワークシートには、変数を印刷するtoStringを使用しています。 ScalaのArray[Int]は、ObjecttoStringメソッドをオーバーライドしないJavaのint[]に対応します。ここで

がある ObjecttoString方法:一方

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

ScalaのREPLは、特定のクラスのための特別なロジックを持っているそれらの間Array

「修正する」ことは何もありません。これらのツールの設計方法です。あなたはかなりのアイデアのワークシートの配列の値を印刷したい場合は、java.util.Arrays.toStringを使用するか、または別のコレクションに値を変換:

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

が生成されます

a: Array[Int] = [[email protected] 
res0: String = [[email protected] 
res1: String = [1, 2, 3] 
res2: Seq[Int] = WrappedArray(1, 2, 3)