Quelle est la différence entre l'égalité?, eql?, = = = et ==?

Je suis en train d'essayer de comprendre la différence entre ces quatre méthodes. Je sais par défaut que == appelle la méthode equal? qui renvoie vrai si les deux opérandes reportez-vous à exactement le même objet.

=== par défaut des appels == qui appelle equal?... bon, donc, si l'ensemble de ces trois méthodes ne sont pas remplacées, alors je suppose
===, == et equal? faire exactement la même chose?

Vient maintenant eql?. Qu'est-ce faire (par défaut)? Faut-il faire un appel à l'opérande de hachage de l'/id?

Pourquoi Ruby ont donc beaucoup de l'égalité des signes? Sont-ils censés diffèrent dans la sémantique?

  • Je viens de commencer une cisr et a le résultat suivant qui est en contradiction avec les vôtres...l'Ensemble de ces 3 sont remplies: "a" == "a", "a" === "a" et "a".eql? "a". Mais c'est faux: "a".equal? "a" (le Mien est ruby 1.9.2-p180)
  • C'est parce que les chaînes de remplacer tous les opérateurs d'égalité. Essayez d'utiliser a = Object.new; b = Object.new puis tous les ==, ===, .equal?, .eql? sera de retour true pour a vs a et false pour a vs b.
InformationsquelleAutor denniss | 2011-08-23