Scala中的println与System.out.println

Scala中的println与System.out.println,scala,compatibility,println,Scala,Compatibility,Println,我一直认为,Predef.println仅仅是System.out.println的快捷方式,但显然我错了,因为它似乎根本没有使用System.out。为什么会这样?如何在Scala中执行下面的System.out的“重定向” scala> val baos = new java.io.ByteArrayOutputStream baos: java.io.ByteArrayOutputStream = scala> val ps = new java.io.PrintStrea

我一直认为,
Predef.println
仅仅是
System.out.println
的快捷方式,但显然我错了,因为它似乎根本没有使用
System.out
。为什么会这样?如何在Scala中执行下面的
System.out
的“重定向”

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
Console.println
的快捷方式,您可以使用
Console.setOut
Console.withOut
进行重定向

另外,
Console.setOut
仅在System.setOut时影响当前线程 影响整个JVM。此外,Scala 2.9
repl
在其自己的线程中计算每一行,因此
Console.setOut
在那里不可用

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

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

scala> println(baos)
hello

看,“没有”听起来有点不对,即使是大O也不能治愈它@我同意。更糟糕的是,中甚至有一个
控制台。