Existe-t-il un moyen d'inclure un module dans une classe de sorte que les méthodes du module remplacent les méthodes de la classe? Par exemple:Comment inclure un module dans une classe afin que le module remplace la classe?
module UpcasedName
def name
@name.upcase
end
end
class User
attr_accessor :name
include UpcasedName
end
u = User.new
u.name = 'john'
puts u.name # outputs 'john', not 'JOHN'
Dans l'exemple ci-dessus, est u.name 'john', pas 'JOHN'. Je sais que si je tends l'objet utilisateur au lieu d'inclure le module à la classe, cette travaillera
module UpcasedName
def name
@name.upcase
end
end
class User
attr_accessor :name
end
u = User.new
u.name = 'john'
u.extend UpcasedName
puts u.name # outputs 'JOHN'
Cependant, je veux inclure le module au niveau de la classe, pas de niveau objet.
Merci pour la référence. Cependant, le base.alias_method_chain: nom,: upcase doit être changé pour base.alias_method_chain: nom,: name_with_upcase – gsmendoza