47

Predef.printlnそれは単なる近道だといつも思っていましたが、まったくSystem.out.println使われていないようで、どうやら間違っているようですSystem.out。どうしてこんなことに?そして、どうすればSystem.outScalaで以下の「リダイレクト」を行うことができますか?

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
"
4

1 に答える 1

43

Predef.printlnはのショートカットであり、またはをリダイレクトするためにConsole.println使用できます。Console.setOutConsole.withOut

また、Console.setOutSystem.setOutがJVM全体に影響するのに対し、現在のスレッドにのみ影響します。さらに、Scala 2.9replは独自のスレッドで各行を評価するため、そこConsole.setOutでは使用できません。

scala> val baos = new java.io.ByteArrayOutputStream
baos: java.io.ByteArrayOutputStream = 

scala> Console.withOut(baos)(print("hello"))

scala> println(baos)
hello
于 2011-08-28T07:05:19.193 に答える