[scala]usingをobjectで

今まで、SS本のobjectの関数として書いていたのを使ってたけど、
objectのapplyにできることに気がついた。

package asanutil

object using {
    /**
        @param  IO      ファイルやストリームなど、close()メソッドのあるクラス   
        @param  io      IOのインスタンス
        @param  proc    ioを使う処理
        @param  R       procの戻り値の型
        @return         procの戻り値を返す
    */
    def apply[IO <: {def close(): Unit}, R](io:IO)(proc:IO => R): R =
        try { proc(io) } finally { io.close() }
}

いい感じだ。