Scala日記

Scalaの備忘録。ときどき研究の話。

Scala の標準ライブラリを使って try-with-resource 構文相当の表現を書く

Scalaには標準では try-with-resource 構文が備わっていないが、自分で簡単に実装できるので、一般的にはこんなかんじのコードをそれぞれ書いて使う。

gist.github.com

標準ライブラリの範囲でできる書き方が何かないかなと模索していたら、こんな書き方ができそうだと判明。

gist.github.com

最初はこれでちゃんとフラッシュされるのか心配したが、どうやらフラッシュされるっぽい。

gist.github.com

ただ、この書き方は複数のリソースを使うときは書けない。

最初の書き方も、複数のリソースを使う場合には入れ子になってしまってあまり嬉しくない。 下のように可変長引数を使って書くこともできるが、第一引数で渡すリソースの数と第二引数で渡す関数リテラルの引数の数の整合性を取れないのでいまいち。

gist.github.com

気持ちとしては、下のような書き方が出来るようにしたいのだけど、リソースの数に合わせた関数をたくさん作るしかないのだろうか。

gist.github.com

下の参考文献によると、for式の中で foreach的に書く記法をサポートする方法もあるらしい。 自分なりに改変してみたコードがこれ。

gist.github.com

本質的にはforeachの入れ子のままだが、見た目上はインデントが減って見やすくなるので視覚的な問題は解決している。 このスタイルが現在のこの手のライブラリの主流のようだ。

github.com

github.com

参考文献:

  1. Scala using(Hishidama's Scala loan-pattern Memo)

  2. d.hatena.ne.jp

  3. tototoshi.hatenablog.com