kayawari
1/5/2017 - 1:27 AM

extend-includeのマジック.rb

extend-includeのマジック.rb

######################################################
# 継承関係 #
# BaseClass -> FirstLevelModule -> SecondLevelModule #
######################################################

class BaseClass
  include FirstLevelModule
end

module FirstLevelModule
  include SecondLevelModule

  def self.included(base)
    base.extend ClassMethods
    # base.send :include second
  end

  module ClassMethods
  end
end

module SecondLevelModule
  module ClassMethods
    # FirstLevelModuleの特異メソッド(クラスメソッド)になる
  end

  def self.included(base) # => FirstLeveModule
    base.extend ClassMethods
  end
end

######################################################################################
# - includeはインスタンスメソットをコピーする                       #
#   - クラスメソッドを対象外                                              #
# - includedメソッドを利用することでクラスメソッドを定義する #
# - extendは特異メソッド(クラスメソッド)を定義する         #
# 
# - 完結にまとめると、レシーバーが上記だとズレてしまうということ                  #
######################################################################################