Die beiden haben wirklich nichts miteinander zu tun. Insbesondere #==ist der Gleichheitsoperator und #===hat absolut nichts mit Gleichheit zu tun. Ich persönlich finde es sehr schade , dass #===sieht so ähnlich , #==verwendet das Gleichheitszeichen und oft wird die gerufene Fall Gleichheitsoperator , triple equals Operator oder threequals Operator , wenn es wirklich nichts mit Gleichheit zu tun hat.
Ich rufe #===den Fall-Subsumtions-Operator an (es ist das Beste, was ich mir vorstellen kann, ich bin offen für Vorschläge, insbesondere von englischen Muttersprachlern).
Die beste Art zu beschreiben a === bist: "Wenn ich eine Schublade beschriftet habe a, ist es sinnvoll, sie beinzulegen?"
So wird zum Beispiel Module#===getestet, ob b.is_a?(a). Wenn ja Integer === 2, ist es sinnvoll, 2eine Box mit der Aufschrift zu verwenden Integer? Ja tut es. Was ist mit Integer === 'hello'? Offensichtlich nicht.
Ein anderes Beispiel ist Regexp#===. Es testet auf ein Match. Ist es sinnvoll, 'hello'eine beschriftete Box einzulegen /el+/? Ja tut es.
Für Sammlungen wie Bereiche Range#===wird dies als Mitgliedschaftstest definiert: Es ist sinnvoll, ein Element in ein Feld mit einer Sammlung einzufügen, wenn sich dieses Element in der Sammlung befindet.
Das ist es also, was es #===tut: Es testet, ob das Argument unter dem Empfänger zusammengefasst werden kann.
Was hat das mit caseAusdrücken zu tun? Einfach:
case foo
when bar
baz
end
ist das gleiche wie
if bar === foo
baz
end