Pregunta println vs System.out.println en Scala


Siempre pensé que Predef.println fue simplemente un atajo para System.out.println, pero aparentemente estoy equivocado, ya que no parece usar System.out en absoluto. ¿Por qué es así? ¿Y cómo puedo hacer el "redireccionamiento" de System.out a continuación en 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
"

41
2017-08-28 05:58


origen


Respuestas:


Predef.println es un atajo para Console.println y puedes usar Console.setOut o Console.withOut para redirigir

También, Console.setOut solo afecta al hilo actual mientras System.setOut afecta a toda la JVM. Además Scala 2.9 repl evalúa cada línea en su propio hilo, por lo Console.setOut no se puede usar allí.

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

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

scala> println(baos)
hello

36
2017-08-28 07:05



Preguntas populares