最近仕事で scala を書いてまして、 Java 延長線上として使う分には全く問題ないのだが、 scala ぽいこととなるとかなり怪しい。 なので初歩から少しずつ勉強して、その様子を晒しておくことにする。
今日は loan pattern。 リソース解放を忘れずに行うためのパターン。 C++ では RAII, golang では defer を使う場面で使うやつ。
以下、基本形。
1 2 3 4 5 6 7 8 9 10 11 |
|
ポイント
- parameterized type の R には structural type で upper bound を指定する(
R <: {def close()}
)。 これにより R にはclose()
メソッドを持つ任意の型を受け付けられる。 Structural typing は scala で duck typing できる機能。便利。 R の upper bound に trait や class を指定すると継承関係がある型しか使えないので 汎用性が下がり残念な気持ちになる。注意。
それにしても名前が覚えづらい。
参考
2013/6/12: parameterized type R の指定には upper bound で structural type を指定するのではなく、 view bound (R <% {def close()}
) で structural type を指定する方が汎用性が高い。