2009-11-28 5 views

Répondre

9

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" 
+1

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

+0

@jaydel, Vous avez raison. J'ai mis à jour le code. – Geo