Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Class | inherited

概要

Class | inherited

詳細

Class#inheritedは継承された時に呼び出される処理です。
引数には呼び出した継承側クラスが渡されます。

サンプル

仕様

クラスの継承の際に、基底クラスに継承側クラスのメソッド呼び出しを登録します。
継承時点ではメソッドは存在していないため、
文字列として保持し別途定義したメソッド(execute_children)から呼び出します。

コード
# encoding: utf-8

class Hoge
  class << self
    attr_accessor :child_methods
    def inherited(sub)
      @child_methods ||= []
      sub_name = sub.name
      @child_methods << "#{sub_name}.new.#{sub_name.downcase}"
    end

    def execute_children
      child_methods.each {|m|class_eval m}
    end
  end
end

class Hage < Hoge
  def hage
    puts "hage"
  end
end

class Hige < Hoge
  def hige
    puts "hige"
  end
end

Hoge.execute_children
出力
hage
hige