Ich versuche, ein Modul in einer Klasse zu mischen, und ich möchte, dass einige Methoden als Klassenmethoden und andere als Instanzmethoden fungieren.Klasse << Notation in Modulen
aber ich möchte nicht, sowohl include
undextend
das Modul. Ich würde lieber nur include
es.
Wenn ich die Methoden wickeln I Klassenmethoden in dieser Notation sein wollen, es funktioniert:
class <<
# ...
end
Allerdings, wenn ich diese Notation verwenden funktioniert es nicht:
class << self
# ...
end
I vermuten, dass das Schlüsselwort self
eine explizite Bindung an das Modul einführt und nicht die Klasse, in die es eingefügt wird. Aber ich habe keine Dokumentation gesehen, die empfiehlt, das Schlüsselwort self
bei Verwendung der Notation class <<
zu lassen.
Weiß jemand, was hier vor sich geht?
UPDATE: Hier ist ein Beispielcode für mehr Klarheit:
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
Huh, habe ich etwas verpasst? 'class << end' ist ein Syntaxfehler. – sepp2k