J'ai toujours pensé que Predef.println
n'était qu'un raccourci pour System.out.println
, mais apparemment je me trompe, car il ne semble pas utiliser System.out
du tout. Pourquoi est-ce si? Et comment puis-je faire la "redirection" de System.out
ci-dessous à Scala?
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
est un raccourci pour Console.println
et vous pouvez utiliser Console.setOut
ou Console.withOut
pour la redirection.
Aussi, Console.setOut
affecte uniquement le thread actuel tandis que System.setOut affecte l'ensemble de la JVM. De plus Scala 2.9 repl
évalue chaque ligne dans son propre thread, donc Console.setOut
n'est pas utilisable ici.
scala> val baos = new Java.io.ByteArrayOutputStream
baos: Java.io.ByteArrayOutputStream =
scala> Console.withOut(baos)(print("hello"))
scala> println(baos)
hello