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.9repl
在其自己的线程中计算每一行,因此Console.setOut
在那里不可用
scala> val baos = new java.io.ByteArrayOutputStream
baos: java.io.ByteArrayOutputStream =
scala> Console.withOut(baos)(print("hello"))
scala> println(baos)
hello
看,“没有”听起来有点不对,即使是大O也不能治愈它@我同意。更糟糕的是,中甚至有一个
控制台。