Help us understand the problem. What is going on with this article?

Ruby で明示的に名前を指定して親クラスのメソッドを呼ぶ

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

自身の親メソッドを呼ぶ

自身と同じ名前の親メソッドを呼ぶ場合は super が利用できます。

  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    # Super#value を呼ぶ
    super
  end
end

p Sub.new.value
# => "Super#value"

では、異なるメソッドから任意の親メソッドを呼ぶ場合はどうするのでしょうか。

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    # ここで Super#value を呼び出したい
  end
end

答え: Method#super_method を使う

こういう場合は Method#super_method が利用できます。
次のようにして任意のメソッドオブジェクトを取得し、 #super_method で親のメソッドオブジェクトを取得します。

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    # value のメソッドオブジェクトを取得し、その親メソッドを参照する
    method(:value).super_method.call
  end
end

p Sub.new.value2
# => "Super#value"

おまけ

以下のように .instance_method を利用して任意のクラスのメソッドを呼び出すこともできます。

class Super
  def value
    "Super#value"
  end
end

class Sub < Super
  def value
    "Sub#value"
  end

  def value2
    Super.instance_method(:value).bind(self).call
  end
end

p Sub.new.value2
# => "Super#value"
pink_bangbi
C++ とか Vim とか Ruby とかメタプログラミングとか
http://secret-garden.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした