print中的println vs System.out.println

Kim*_*bel 45 compatibility scala println

我一直认为这Predef.println只是一个捷径System.out.println,但显然我错了,因为它似乎根本没用System.out.为什么会这样?我怎样才能System.out在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
"
Run Code Online (Sandbox Code Playgroud)

4e6*_*4e6 39

Predef.println是快捷方式Console.println,您可以使用Console.setOutConsole.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
Run Code Online (Sandbox Code Playgroud)

  • '没有'听起来有些不对劲,即使是大O也没有治愈它.:) (12认同)