クラス階層が必要のないグローバル関数を、グローバルな名前空間を汚さないためにModuleとしてまとめる方法。
moduleに定義したインスタンスメソッドをmix-inする方法( include, extend)
includeはインスタンスメソッドとして織りまぜ、
extendは特異メソッドとして織りまぜる。
module SampleModule
# class method
def self.hello
puts "hello"
end
# class method
def self.goodby
puts "goodby"
end
# instance method
def good_morning
puts "good_morning"
end
end
class IncludeMod
# インスタンスメソッドとしてinclude
include SampleModule
end
class ExtendMod
# クラスメソッドとしてextend
# この時のselfはクラスの中、メソッド定義の外なので ExtendModクラスをサス(P225)
self.extend SampleModule
#ExtendMod.extend SampleModule
end
SampleModule.hello
SampleModule.goodby
IncludeMod.new.good_morning
ExtendMod.good_morning
No comments:
Post a Comment