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.println
是Console.println
快捷方式,您可以使用Console.setOut
或Console.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