これとかこれで何度もだしてますが、リソース自動で閉じる制御構文っぽいものの話。
まえ定義したのって、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:終了の処理を行うわけではなく、終了の処理を行う関数を先に渡す