45 votes

println vs System.out.println à Scala

J'ai toujours pensé que Predef.println était simplement 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 effectuer la "redirection" de System.out ci-dessous dans 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
"
 

39voto

4e6 Points 5970

Predef.println est un raccourci pour Console.println et vous pouvez utiliser Console.setOut ou Console.withOut pour la redirection.

De plus, Console.setOut n'affecte que le thread actuel, tandis que System.setOut affecte l'ensemble de la machine virtuelle. 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X