Scala の標準ライブラリを使って try-with-resource 構文相当の表現を書く
Scalaには標準では try-with-resource 構文が備わっていないが、自分で簡単に実装できるので、一般的にはこんなかんじのコードをそれぞれ書いて使う。
標準ライブラリの範囲でできる書き方が何かないかなと模索していたら、こんな書き方ができそうだと判明。
最初はこれでちゃんとフラッシュされるのか心配したが、どうやらフラッシュされるっぽい。
ただ、この書き方は複数のリソースを使うときは書けない。
最初の書き方も、複数のリソースを使う場合には入れ子になってしまってあまり嬉しくない。 下のように可変長引数を使って書くこともできるが、第一引数で渡すリソースの数と第二引数で渡す関数リテラルの引数の数の整合性を取れないのでいまいち。
気持ちとしては、下のような書き方が出来るようにしたいのだけど、リソースの数に合わせた関数をたくさん作るしかないのだろうか。
下の参考文献によると、for式の中で foreach的に書く記法をサポートする方法もあるらしい。 自分なりに改変してみたコードがこれ。
本質的にはforeachの入れ子のままだが、見た目上はインデントが減って見やすくなるので視覚的な問題は解決している。 このスタイルが現在のこの手のライブラリの主流のようだ。
参考文献: