LoginSignup
0
0

More than 5 years have passed since last update.

Ruby で refinements で mixin したメソッドから別のメソッドを呼び出す

Posted at

ブログ記事からの転載です。

さて、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"

これ、もっとスマートな方法ありますかね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0