为什么scala可以支持这个:新的PrintWriter(“文件名”){write(“文件内容”);close}?

为什么scala可以支持这个:新的PrintWriter(“文件名”){write(“文件内容”);close}?,scala,syntax,Scala,Syntax,我有一个关于把戏的问题 new PrintWriter("/tmp/some.file") { write("file contents"); close } 我从中学到的 有趣的帖子: 这项技术非常有效(对于测试代码),但是我对正在发生的事情有点困惑 关于Scala中的语法 PrintWriter是一个java类。。。但它看起来像是一个代码块 正在传递给print writer实例, 并且隐式地在该实例上执行方法调用。 PrintWriter java类定义没有采用 功能块 所以。。我对

我有一个关于把戏的问题

new PrintWriter("/tmp/some.file") { write("file contents"); close }  
我从中学到的 有趣的帖子:

这项技术非常有效(对于测试代码),但是我对正在发生的事情有点困惑 关于Scala中的语法

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

所以。。我对visa vi Scala语法的发展感到困惑


谢谢

这是因为您正在有效地创建一个扩展PrintWriter类的匿名对象。代码
写入(“文件内容”);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

s/匿名对象/匿名类。
newsomeclass{…}
也是用Java编写的,除了在Java中,构造函数的代码需要是显式的。回答得好!不好意思,我没有意识到;^)@克里斯贝德福德发生在我们当中最好的人身上:)