Scala 的 Java 7 风格自动资源管理 [英] Java 7 style automatic resource management for Scala
问题描述
Java 7 引入了自动资源管理:
Java 7 has introduced automatic resource management:
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
这适用于任何实现 java.lang.AutoClosable
的类.
This will work with any class that implements java.lang.AutoClosable
.
我知道有几个在 Scala 中进行自动资源管理的示例,其中一个由 Martin Odersky 演示.
I know there are several examples of doing automatic resource management in Scala, including one demonstrated by Martin Odersky.
有没有计划给Scala添加一个语言级别的资源管理,类似于Java的try(...) { }
?
Is there any plan to add a language-level resource management to Scala, similar to Java's try(...) { }
?
推荐答案
在 Scala 中,这可以作为库添加.例如 scala-arm (https://github.com/jsuereth/scala-arm)来自 jsuereth:
In scala this can be added as a library. As a example scala-arm (https://github.com/jsuereth/scala-arm) from jsuereth:
命令式:
// Copy input into output.
for(input <- managed(new java.io.FileInputStream("test.txt");
output <- managed(new java.io.FileOutputStream("test2.txt")) {
val buffer = new Array[Byte](512)
while(input.read(buffer) != -1) {
output.write(buffer);
}
}
一元风格
val first_ten_bytes = managed(new FileInputStream("test.txt")) map {
input =>
val buffer = new Array[Byte](10)
input.read(buffer)
buffer
}
在github页面上还有一些例子
On the github page are some more examples
这篇关于Scala 的 Java 7 风格自动资源管理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!