Ruby で refinements で mixin したメソッドから別のメソッドを呼び出す
さて、Ruby では refinements 内で mixin したメソッド内から同モジュールのメソッドを呼び出すことはできません。
module Homu def homu p "homu" end def mami homu end end module ObjectEx refine Object do include Homu end end using ObjectEx obj = Object.new obj.mami # => undefined local variable or method `homu' for #<Object:0x0000000271e510> (NameError)
[解決]
UnboundMethod
を経由することで mixin
したモジュールのメソッドを呼び出すことができます。
module Homu def homu p "homu" end def mami # homu # UnboundMethod を経由してメソッドを呼び出す Homu.instance_method(:homu).bind(self).call() end end module ObjectEx refine Object do include Homu end end using ObjectEx obj = Object.new obj.mami # => "homu"
これ、もっとスマートな方法ありますかね