ruby クラス変数のmix-in 継承備忘

module Base
  def show_send
    puts "__send__ = #{self.class.__send__ :class_variable_get ,:@@__base_val}"
  end

  def show_class_val
    puts "@@       = #{@@__base_val_class}"
  end

  def self.included(mod)
    mod.class_eval do |_kls|
      class << _kls
        def init(val)
          self.__send__ :class_variable_set ,:@@__base_val,val
          @@__base_val_class = val
        end
      end
    end
  end
end

class Aaa
  include Base
  init :aaa_some
end

class Bbb
  include Base
  init :bbb_some
end

a = Aaa.new
b = Bbb.new
a.show_send
b.show_send

a.show_class_val
b.show_class_val

======

__send__ = aaa_some
__send__ = bbb_some
@@       = bbb_some
@@       = bbb_some