Sto provando a mischiare un modulo in una classe e voglio che alcuni dei metodi si comportino come metodi di classe e altri come metodi di istanza.classe << notazione nei moduli
Tuttavia, io non voglio sia include
eextend
il modulo. Preferirei semplicemente lo include
.
Quando ho avvolgere i metodi che voglio essere metodi di classe in questa notazione, funziona:
class <<
# ...
end
Tuttavia, quando uso questa notazione non funziona:
class << self
# ...
end
I sospetto che la parola chiave self
stabilisca un binding esplicito per il modulo, piuttosto che la classe in cui viene mescolato. Ma non ho visto alcuna documentazione che consiglia di disattivare la parola chiave self
quando si utilizza la notazione class <<
.
Qualcuno sa cosa sta succedendo con questo?
UPDATE: Ecco alcuni esempi di codice per maggiore chiarezza:
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, mi sono perso qualcosa? 'class << end' è un errore di sintassi. – sepp2k