関数にリソースを貸し出すことからローンパターンと言われるらしい。
def main(args: Array[String]) { // 第二引数に、PrintWriterを受けて // ファイル出力を行う関数を指定する。 writeFile(new File("test.txt"), writer => writeData(writer)) } private def writeData(printWriter: PrintWriter) { println("wite start") printWriter.println("1") printWriter.println("2") printWriter.println("3") printWriter.println("4") printWriter.println("5") println("wite end") } def writeFile(file: File, write: PrintWriter => Unit) { // リソースを開く println("open file.") val writer = new PrintWriter(file) try { // 第二引数の関数にリソースを貸し出す。 write(writer) } finally { // 最後にリソースを閉じる println("close file.") writer.close(); } }
実行結果
ファイルオープン→書き込み→ファイルクローズの順に処理が行われていることがわかる。open file. wite start wite end close file.