On peut facilement généraliser à un nombre quelconque d'instances et laisser tomber l'exigence de getters pour les variables d'instance:
class Aaa
def initialize(a,b,c)
@a, @b, @c = a, b, c
end
end
x = Aaa.new(1,2,3)
y = Aaa.new(1,2,3)
z = Aaa.new(1,2,3)
arr = [x,y,z]
x.instance_variables.map do |v|
arr.map { |i| i.send(:instance_variable_get,v) }.uniq.size == 1
end.all?
#=>true
Changement z
à:
z = Aaa.new(1,2,4)
alors:
x.instance_variables.map do |v|
arr.map { |i| i.send(:instance_variable_get,v) }.uniq.size == 1
end.all?
#=> false
Mais que faire si je veux le faire en utilisant d'autres classes? Ou s'il y a 100 attributs? – dfens
Dans votre méthode == (autre), vous pouvez faire self.instance_variables.each faire | ivar | self.ivar == other.ivar end Vous pouvez aussi regarder ===. –
travaillé pour moi, merci – dfens