Scala 的 Java 7 风格自动资源管理 [英] Java 7 style automatic resource management for Scala

查看:36
本文介绍了Scala 的 Java 7 风格自动资源管理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆