Quelle est la bonne façon de mettre en œuvre l'égalité en ruby
Pour un simple struct-comme la classe:
class Tiger
attr_accessor :name, :num_stripes
end
quelle est la bonne façon de mettre en œuvre l'égalité correctement, pour s'assurer que ==
, ===
, eql?
, etc, et donc que les instances de la classe jouent bien dans les ensembles, hache, etc.
MODIFIER
Aussi, ce qui est une belle façon de mettre en œuvre l'égalité lorsque vous souhaitez comparer en fonction de l'état qui n'est pas exposée à l'extérieur de la classe? Par exemple:
class Lady
attr_accessor :name
def initialize(age)
@age = age
end
end
ici, j'aimerais que mon égalité méthode pour prendre @âge en compte, mais la Dame ne veut pas exposer de son âge pour les clients. Aurais-je à utiliser instance_variable_get dans cette situation?
Vous devez vous connecter pour publier un commentaire.
Pour simplifier les opérateurs de comparaison pour les objets avec plus d'une variable d'état, de créer une méthode qui retourne l'ensemble de l'état de l'objet comme un tableau. Ensuite, il suffit de comparer les deux états:
Aussi, si vous voulez les instances de votre classe pour être utilisable comme une clé de hachage, puis ajouter:
Ces le besoin d'être public.
Pour tester toutes vos variables d'instance de l'égalité à la fois:
Généralement avec la
==
opérateur.true == true
(et1+1 == 2
) renvoie toujourstrue
...