为什么scala支持这个:new PrintWriter(“filename”){write(“file contents”);关闭}?

时间:2017-05-21 23:02:47

标签: scala syntax

我有一个关于技巧的问题

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语法

谢谢!

1 个答案:

答案 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