gpt4 book ai didi

scala - Scala文件是否需要在删除前释放?

转载 作者:行者123 更新时间:2023-12-01 09:05:29 24 4
gpt4 key购买 nike

在下面的代码中,如果我取消注释 for 循环,则文件不再被删除

val file = "myfile.csv"
//for (line <- Source.fromFile(file).getLines()) { }
new File(file).delete()

如果是这样,我应该调用某种类型的关闭函数吗?

最佳答案

您应该调用某种关闭方式:

val file = "myfile.csv"
val source = Source.fromFile(file)
for (line <- source.getLines()) { }
source.close
new File(file).delete

但这有点乏味。如果将 for 循环重写为

source.getLines().foreach{ line => }

你就可以了

class CloseAfter[A <: { def close(): Unit }](a: A) {
def closed[B](f: A => B) = try { f(a) } finally { a.close }
}
implicit def close_things[A <: { def close(): Unit }](a: A) = new CloseAfter(a)

现在你的代码会变成

val file = "myfile.csv"
Source.fromFile(file).closed(_.foreach{ line => })
new File(file).delete

(如果您在代码中多次执行此操作,或者您已经维护了自己的有用函数库,并且很容易在此处添加关闭隐式以便您可以使用它,这将是一个好处无处不在)。

关于scala - Scala文件是否需要在删除前释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8612044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com