サカナ未遂

プログラミング、筋トレ、子育て

Rubyのsuperの呼び出しについて、モジュールをincludeしてる場合

Rubyで、superを使ってスーパークラスで定義されたメソッドにたどり着きたい場合、モジュールがインクルードされていると期待する動作をしない、というのを学んだ。

例)

module Foo
  def hoge
    puts "Foo!!"
  end
end

class SuperBar
  def hoge
    puts "SuperBar!!"
  end
end

class Bar < SuperBar
  include(Foo)

  def hoge
    super      # Fooのhogeが呼び出される
  end
end

superを使うと、継承元のメソッドを呼び出すもんだと思っていたが、モジュールに同名のメソッドがあると、そちらが使われる。 なので、superで意図しない動きをした場合、includeしているモジュールに同名のメソッドがある可能性も視野にいれる必要がある。