为什么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中,构造函数的代码需要是显式的。回答得好!不好意思,我没有意识到;^)@克里斯贝德福德发生在我们当中最好的人身上:)