関数にリソースを貸し出すことからローンパターンと言われるらしい。
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.