どのようにmixを入れる方法、クラスの方法になります
1700 ワード
どのようにmixを入れる方法、クラスの方法になります
【例1】
module MyModule
def a_method
puts "hello, MyModule#a_method"
end
end
class E
include MyModule
end
E.new.a_method
classでinclude Moduleのメソッドを使用すると、moduleのメソッドはclassのインスタンスメソッドになります.
【例2】
module MyModule
def self.a_method
puts "hello, MyModule#a_method"
end
end
class E
include MyModule
end
E.new.a_method
E.a_method
モジュールメソッドがincludeされる場合,クラスメソッドとしてもインスタンスメソッドとしても機能しない.
【例3】
module MyModule
def a_method
puts "hello, MyModule#a_method"
end
end
class E
class << self
include MyModule
end
end
E.a_method
#=> hello, MyModule#a_method
この方法はModuleのメソッドをクラスEのeigenclassに導入することであり,eigenclassについては複雑であるが,メソッド呼び出し時にクラス対応のeigenclassで検索し(各クラスに対応するeigenclassが1つある),なければ親クラスで検索するという意味である.
【例4】
module MyModule
def a_method
puts "hello, MyModule#a_method"
end
end
obj = Object.new
obj.extend(MyModule)
obj.a_method
class E
extend MyModule
end
E.a_method
#=> hello, MyModule#a_method
#=> hello, MyModule#a_method
extendメソッドは,実際にはModuleメソッドをクラスのeigenclassに組み込む.