Fallvergleiche verwenden ===
anstatt ==
. Bei vielen Objekten ist das Verhalten von ===
und ==
gleich, siehe Numeric
und String
:
Aber für andere Arten von Objekten kann ===
viele Dinge bedeuten, ganz abhängig vom Empfänger.
Bei Klassen überprüft ===
, ob ein Objekt eine Instanz dieser Klasse ist:
Für Range wird überprüft, ob ein Objekt in diesen Bereich fällt:
%Vor% Bei Procs ruft ===
tatsächlich Proc
auf:
Für andere Objekte überprüfen Sie ihre Definition von ===
, um ihr Verhalten aufzudecken. Es ist nicht immer offensichtlich, aber sie machen normalerweise einen Sinn ..
Hier ist ein Beispiel, das alles zusammenfasst:
%Vor%Siehe diesen Link für weitere Informationen: Ссылка
In der case-Anweisung wird der Vergleich mit ===
operator durchgeführt.
Ihr Code wird folgendermaßen übersetzt:
%Vor% Unterschiedliche Klasse definieren ===
auf andere Weise:
Die Klasse Class
definiert ===
, so dass sie testet, ob der rechte Operand ( x
) eine Instanz der vom linken Operanden benannten Klasse ist ( User
). Es ist also keine Überraschung, dass User === x
als false
ausgewertet wird. Stattdessen ist User === u
(u = Benutzer.neu) true
.