RubyのRefinementでモジュールincludeやalias定義はどうなるか
確認してみた結果、refine
でinclude
したモジュールのメソッドや定義したエイリアスは、refinementをusing
したときだけ有効になった。
refine
でinclude
したモジュールはusing
しても見えないがメソッドは有効になるようだ。
確認コード:
module IncludeMethod def include_method :include end end module RefineMethod refine Object do include IncludeMethod def refine_method :refine end alias refine_method_alias refine_method end end p Object.include? IncludeMethod begin refine_method rescue p $! end begin refine_method_alias rescue p $! end begin include_method rescue p $! end using RefineMethod p Object.include? IncludeMethod p refine_method p refine_method_alias p include_method
確認結果:
$ ruby ex_refine.rb false #<NameError: undefined local variable or method `refine_method' for main:Object Did you mean? define_method> #<NameError: undefined local variable or method `refine_method_alias' for main:Object Did you mean? define_method> #<NameError: undefined local variable or method `include_method' for main:Object> false :refine :refine :include