Есть какая-то близость, которую вы должны звонить:
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
(что будет полезно, еслиВы делаете это много раз в своем коде, или если вы уже поддерживаете свою собственную библиотеку полезных функций, и было бы легко добавить неявное закрытие только один раз, чтобы вы могли использовать его везде).