2009-12-13 7 views
0

J'ai une classe de base qui contient un égal? méthode. J'ai donc hérité de cet objet et je veux utiliser l'égal? méthode dans la super classe dans le cadre de l'égalité? méthode dans la sous-classe. Comment puis-je référencer l'objet de classe A hérité dans la sous-classe afin que je puisse faire la comparaison?Comparer deux objets hérités Ruby

Vive

Dan

+0

C'est en quelque sorte un double de http://StackOverflow.Com/questions/1830420/ –

+0

j'ai fourni une réponse très détaillée à cette question particulière ici: http: //StackOverflow.Com/questions/1830420/is-it-possible-to-compare-private-attributes-in-ruby/1832634/#1832634. Cela s'applique également à votre question. –

+0

dans ruby ​​la méthode pour comparer deux objets est habituellement nommée '==' et pas 'égale?' – johannes

Répondre

3
class A 
    attr_accessor :a, :b 
    def equal? other 
    a == other.a and b == other.b 
    end 
end 

class B < A 
    attr_accessor :c 
    def equal? other 
    # super(other) calls same method in superclass, no need to repeat 
    # the method name you might be used to from other languages. 
    super(other) && c == other.c 
    end 
end 

x = B.new 
x.a = 1 
y = B.new 
y.a = 2 
puts x.equal?(y)  
+2

'super' sans arguments fournit les mêmes arguments que la méthode originale a été appelée avec. Il n'y a pas besoin d'appeler explicitement 'super (autre)', tout simplement 'super' suffit. –