println与Scala中的System.out.println

我一直认为Predef.println只是System.out.println一个快捷方式,但显然我错了,因为它似乎并没有使用System.out 。 为什么? 我该如何做Scala中System.out的“redirect”?

 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.printlnConsole.println快捷方式,您可以使用Console.setOutConsole.withOut进行redirect。

另外, 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