Sunday 3 December 2017

compatibility - println vs System.out.println in Scala

itemprop="text">

I always thought that
Predef.println was merely a shortcut for
System.out.println, but apparently I am mistaken, since it
doesn't seem to use System.out at all. Why is that so? And how
can I do the "redirecting" of System.out below in
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
"


Answer




Predef.println is
shortcut for Console.println and you can use
Console.setOut or Console.withOut for
redirecting.




Also,
Console.setOut only affects the current thread while
System.setOut
affects the whole JVM. Additionally Scala 2.9
repl evaluates each line in its own thread, so
Console.setOut is not usable
there.



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


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

scala>
println(baos)

hello


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...