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

Chr*_*ord 3 syntax scala

我有一个关于诡计的问题

new PrintWriter("/tmp/some.file") { write("file contents"); close }  
Run Code Online (Sandbox Code Playgroud)

我从这篇有趣的帖子中学到了:Scala:在一个语句中将字符串写入文件

这项技术效果很好(对于测试代码),但是我对Scala中语法上发生的事情感到有些困惑.

PrintWriter是一个java类......但它看起来像是一个代码块被传递给print writer实例,并且隐式地在该实例上执行方法调用.PrintWriter java类定义没有带有功能块的apply()方法.

那么..我很困惑签证vi Scala的语法

谢谢 !

rog*_*one 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
Run Code Online (Sandbox Code Playgroud)