モジュールをクラスに混在させようとしていますが、一部のメソッドをクラス メソッドとして動作させ、他のメソッドをインスタンス メソッドとして動作させたいと考えています。
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