RubyのClass#inheritedの実行タイミングはクラス定義文の実行直前

サブクラスを呼び出したかったがそうはならない。

class A
  def self.inherited(child)
    p child
    child.aaa
    B.aaa
    aaa
  end

  def self.aaa
    p "A"
  end
end

class B < A
  def self.aaa
    p "B"
  end
end

p "#" * 40
B.aaa

実行結果

B
"A"
"A"
"A"
"########################################"
"B"

docs.ruby-lang.org

Pocket