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は特異メソッド(クラスメソッド)を定義する #
#
# - 完結にまとめると、レシーバーが上記だとズレてしまうということ #
######################################################################################