モジュールをクラスに混在させようとしていますが、一部のメソッドをクラス メソッドとして動作させ、他のメソッドをインスタンス メソッドとして動作させたいと考えています。
include
ただし、両方と extend
モジュールは必要ありません。私はむしろinclude
それをしたいです。
クラスメソッドにしたいメソッドをこの表記法でラップすると、次のように機能します。
class <<
# ...
end
ただし、この表記法を使用すると機能しません。
class << self
# ...
end
self
キーワードが、モジュールが混在するクラスではなく、モジュールへの明示的なバインディングを確立していると思われます。しかし、表記法self
を使用するときにキーワードをオフにしておくことを推奨するドキュメントは見たことがありません。class <<
これで何が起こっているのか誰か知っていますか?
更新:より明確にするためのサンプルコードを次に示します。
module M
class <<
def class_method
puts "From inside the class_method"
end
end
def instance_method
puts "From inside the instance_method"
end
end
class Object
include M
end
class C
end
C.class_method
obj = C.new
obj.instance_method