Pourquoi autant de méthodes pour comparer ?
equal?
correspond à l’égalité des instances. Est-ce le même objet en mémoire ?==
eteql?
sont dans la plupart des cas des alias. Ils correspondent à l’égalité « naturelle » des valeurs des objets (Exception pour Object : alias deequal?
).===
est appelé le « case equality ». C’est cette méthode qui est appelée dans uncase...when
. Par défaut c’est un alias de==
.
Le ===
peut être vue comme un notion d’appartenance : est-ce que tu appartiens à ce que je représente. ⚠️ Cette méthode est en général ni réflexive, ni symétrique, ni transitive.
La documentation précise : « The eql? method returns true if obj and other refer to the same hash key ».
Dans la pratique, ça se traduit souvent par une égalité de type d’objet. eql?
est en quelque sorte l’équivalent du ===
en Javascript (Et non le ===
de Ruby !).
⚠️ On peut trouver des contre-exemples sur certaines implémentations de la méthode eql?
ne respectant pas la définition.
Les liens vers la documentation Ruby de ==
, eql?
, equal?
et ===
.