hakeの日記

Windows環境でプログラミングの勉強をしています。

親クラスのメソッド呼出

Rubyの勉強

掲示板で質問した内容、自身でオーバーライドしたメソッドの親クラスのオリジナルメソッドを呼び出す方法
classBのインスタンスで通常メソッドfooを呼ぶと自身でオーバーライドされたメソッドが実行されてしまうので、オーバーライド前にaliasしておき、そちらを呼ぶことで実現する。
関連情報:

class A
  def foo
    puts "foo in A"
  end
end
class B<A
  alias :foo_A :foo    # def fooよりも前にあることがポイント
  def foo
    super
    puts "foo in B"
  end
  def bar
    foo_A              # class Aのメソッドfooが呼ばれる
    puts "bar in B"
  end
end

B.new.bar
#=> foo in A
#=> bar in B

こんな方法も(まだ理解不能

  def bar
    a_foo_unbound = self.class.superclass.instance_method(:foo)
    a_foo = a_foo_unbound.bind(self)
    a_foo.call
  end