Predef.println
はSystem.out.println
の単なるショートカットであるといつも思っていましたが、System.out
をまったく使用していないように見えるため、間違いだと思われます。どうしてこんなことに?また、Scalaで以下のSystem.out
の「リダイレクト」を行うにはどうすればよいですか?
scala> val baos = new Java.io.ByteArrayOutputStream
baos: Java.io.ByteArrayOutputStream =
scala> val ps = new Java.io.PrintStream(baos)
ps: Java.io.PrintStream = Java.io.PrintStream@6c5ac4
scala> System.setOut(ps)
scala> println("hello")
hello
scala> new String(baos.toByteArray)
res2: Java.lang.String = ""
scala> System.out.println("hello")
scala> new String(baos.toByteArray)
res7: Java.lang.String =
"hello
"
Predef.println
はConsole.println
のショートカットであり、Console.setOut
またはConsole.withOut
をリダイレクトに使用できます。
また、Console.setOut
は現在のスレッドにのみ影響し、System.setOutはJVM全体に影響します。さらにScala 2.9 repl
は独自のスレッドの各行を評価するため、Console.setOut
はそこで使用できません。
scala> val baos = new Java.io.ByteArrayOutputStream
baos: Java.io.ByteArrayOutputStream =
scala> Console.withOut(baos)(print("hello"))
scala> println(baos)
hello