リソースの処理

これとかこれで何度もだしてますが、リソース自動で閉じる制御構文っぽいものの話。
まえ定義したのって、closeって名前のメソッド持ってないといけないわけだけど、たとえばそれがshutdownとかflushだったら、

  • わざわざ別の定義するの?
  • それともメソッド名を渡してリフレクション?

とかめんどくさい事になるので、まえの関数を一般化して、関数の引数として終了の処理自体を先に渡す*1ようなもの作ってみた↓

  def using[A,B]( resource:A )( endAction : A => B )( func: A => Unit ){
    try{
      func(resource)
    }catch{
      case e:Exception => e.printStackTrace
    }finally{
      endAction(resource)
    }
  }

ん〜・・・微妙・・・(´・ω・`)

*1:終了の処理を行うわけではなく、終了の処理を行う関数を先に渡す