Rubyの継承元のクラスの別メソッドをsuperで呼び出す
イントロ
Rubyの継承先で継承元のメソッドを単純に呼び出すにはsuperを使いますが、
継承元の別メソッドを呼び出したい場合にどうしていいのかわからなかったので調べてみました。
詳細
class A def test1(*args) puts "A#test1:args(#{args})" end def test2(*args) puts "A#test2:args(#{args})" end end class B < A def test1(*args) puts "B#test1:args(#{args})" end def test2(*args) method(:test1).super_method.call(*args) puts "B#test2:args(#{args})" end end B.new.test2('test') # => A#test1:args(["test"]) # => B#test2:args(["test"])
Aを継承したBのtest2メソッドを呼び出しているのですが、
test2の処理でAクラスのtest1メソッドを呼び出したくなった場合に
以下の処理で呼び出しています。
method(:test1).super_method.call(*args)
method(:test1)でMethodオブジェクトを取り出して
super_methodで親のAクラスのtest1メソッドのMethodオブジェクトを呼びだせます。
これは便利ですね。
参考URL
親クラスの別のメソッドを呼ぶ - Qiita
class Method (Ruby 2.7.0 リファレンスマニュアル)