Loanパターンをfor式で使えるようにしてみたよ に Conceptパターンを足してみました。 と言うのも、後始末のメソッドは close() だけとは限らず、リソースによって dispose() や release() destroy() など様々あります。それら全部に対応できるといいなと思ってやってみました。 trait Closer[-A] { def close(value: A) } class Loan[A] private (value: A, closer: Closer[A]) { def foreach[B](f: A => B): B = try { f(value) } finally { closer.close(value) } } object Loan { def apply[A](value: A)(implicit closer: Closer[A])