Vous devez le faire depuis une classe. Comme ceci:
class Whatever
attr_accessor :roles
def initialize
@roles = []
end
end
Vous ne pouvez pas vraiment avoir une méthode <<roles
. Vous devez avoir un accesseur pour roles
qui prend en charge l'opérateur <<
.
EDIT: J'ai mis à jour le code. Maintenant, vous pouvez voir comment l'opérateur <<
devrait être surchargé, mais vous pouvez également faire ce que la partie roles<<
. Voici un petit extrait de son utilisation:
w = Whatever.new
w << "overload for object called"
# and overloads for the roles array
w.roles << "first role"
w.roles << "second role"
Dans votre solution, w.roles n'appelle pas la méthode << override ». Il appelle simplement l'attribut << sur @roles, qui n'est pas surchargé. Vous pouvez le tester en ajoutant une ligne puts dans la méthode << override »et vous verrez que w <<" 1 "' vide la sortie puts mais w.roles << "2" ne sauvegarde PAS ce qui place la sortie. – jaydel
@jaydel, Vous avez raison. J'ai mis à jour le code. – Geo