我有一个关于技巧的问题
new PrintWriter("/tmp/some.file") { write("file contents"); close }
我从中学到了什么
有趣的帖子:Scala: write string to file in one statement
这项技术效果很好(对于测试代码而言),但我对将要发生的事情感到有些困惑 在Scala语法上。
PrintWriter是一个java类......但它看起来像一个代码块 被传递给print writer实例, 并且隐式地在该实例上执行方法调用。 PrintWriter java类定义没有带有的apply()方法 功能块。
所以..我很困惑签证vi Scala语法
谢谢!
答案 0 :(得分:5)
这是有效的,因为您正在有效地创建一个扩展PrintWriter类的匿名对象。代码write("file contents"); close
只是这个匿名对象的构造函数的一部分。
scala> val writer = new PrintWriter("/tmp/some.file") { write("file contents"); close }
writer: java.io.PrintWriter = $anon$1@6c07add6
scala> writer.getClass.getName
res4: String = $anon$1