Scala ARM的な自動リソース管理(超簡易版)
自動リソース管理(というかclose管理)を使いたいけど、Scala ARMライブラリを導入するほどのもんでもないなー、というときに自作するためのメモ。
// ラッパクラスと関数の定義 class ManagedResource[T <: {def close(): Unit}](resource: T) { def foreach[U](f: T => U) { try { f(resource) } finally { resource.close } } } def managed[T <: {def close(): Unit}](resource: T) = new ManagedResource(resource) // 使用例 for ( rd <- managed(new LineNumberReader(new FileReader(inFileName))); wri <- managed(new PrintWriter(new FileWriter(outFileName))) ) { def read(l: List[String]=Nil): List[String] = { Option(rd.readLine) match { case Some(s): read(s::l) case None: l.reverse } } val inList = read() val outList = hogehoge(inList) // 諸々処理 for(s <= outList) wri.println(s) } // スコープから抜けるとrd, wriはクローズされる }