我在Web上看到了许多针对Scala的ARM(自动资源管理)示例.虽然大多数看起来很像彼此,但它似乎是一种写作的通道.不过,我确实看到了一个使用延续的非常酷的例子.
无论如何,很多代码都有这种或那种类型的缺陷,所以我认为在Stack Overflow上有一个引用是个好主意,我们可以在这里投票给出最正确和最合适的版本.
是否有更多的自动方式在Scala中打开资源并将方法应用于此方法(直接从java转换),使用__CODE__但也包括finally等.
var is: FileInputStream = null
try {
is = new FileInputStream(in)
func(is)
} catch {
case e: IOException =>
println("Error: could not open file.")
println(" -> " + e)
exit(1)
} finally {
if(is) is.close()
}
Run Code Online (Sandbox Code Playgroud) Scala库中是否有任何标准化来支持可支配资源模式.我的意思是类似于C#和.NET支持的东西,只提一个.
例如,官方Scala库提供的内容如下:
trait Disposable { def dispose() }
class Resource extends Disposable
using (new Resource) { r =>
}
Run Code Online (Sandbox Code Playgroud)
注意:我知道这篇文章« Scala最终阻止关闭/刷新资源 »但它似乎没有集成在标准库中
这是Scala中的代码:
def write() = {
try {
val out = new PrintWriter(new BufferedWriter(new FileWriter(fileName, true)))
out.println("123")
out.close
} catch {
case e: IOException => {}
}
//finally {
//out.close // ops, it's not visible in this context
//}
}
Run Code Online (Sandbox Code Playgroud)
out.close在finally块中有" " 会更好,不是吗?但我不想使用var.
我的问题是,我该如何实现这一目标?