Ruby で動的に refine を定義する
Ruby で refinements を利用すると次のようにクラス拡張を特定の範囲でのみ適用させることができます。
module StringEx refine String do def twice self + self end end end using StringEx p "homu".twice # => "homuhomu"
上記の場合は StringEx
モジュールを定義してそれを using
しているのですが、次のようにして無名モジュールを定義することも出来ます。
using Module.new { refine String do def twice self + self end end } p "homu".twice # => "homuhomu"
局所的にクラス拡張を行ないたい場合に便利。