Wie in vielen der oben genannten Antworten erwähnt, ist die ===
Operator wird unter der Haube verwendet auf case
/ when
Erklärungen.
Hier finden Sie zusätzliche Informationen über diesen Betreiber:
Fallgleichheitsoperator: ===
Viele der in Ruby eingebauten Klassen, wie String, Range und Regexp, bieten ihre eigenen Implementierungen der ===
Operator, auch bekannt als "case-equality", "triple equals" oder "threequals". Da er in jeder Klasse anders implementiert ist, verhält er sich je nach Art des Objekts, für das er aufgerufen wurde, unterschiedlich. Im Allgemeinen wird true zurückgegeben, wenn das Objekt auf der rechten Seite "zu" dem Objekt auf der linken Seite "gehört" oder "ein Mitglied von" ist. Sie kann beispielsweise verwendet werden, um zu prüfen, ob ein Objekt eine Instanz einer Klasse (oder einer ihrer Unterklassen) ist.
String === "zen" # Output: => true
Range === (1..2) # Output: => true
Array === [1,2,3] # Output: => true
Integer === 2 # Output: => true
Das gleiche Ergebnis lässt sich auch mit anderen Methoden erzielen, die für diese Aufgabe wahrscheinlich am besten geeignet sind, z. B. is_a?
y instance_of?
.
Bereich Implementierung von ===
Wenn die ===
Operator für ein Bereichsobjekt aufgerufen wird, gibt er true zurück, wenn der Wert auf der rechten Seite innerhalb des Bereichs auf der linken Seite liegt.
(1..4) === 3 # Output: => true
(1..4) === 2.345 # Output: => true
(1..4) === 6 # Output: => false
("a".."d") === "c" # Output: => true
("a".."d") === "e" # Output: => false
Denken Sie daran, dass die ===
Operator ruft den ===
Methode des linken Objekts. Also (1..4) === 3
ist gleichbedeutend mit (1..4).=== 3
. Mit anderen Worten: Die Klasse des linken Operanden bestimmt, welche Implementierung der ===
Methode aufgerufen wird, so dass die Operandenpositionen nicht austauschbar sind.
Regexp Implementierung von ===
Gibt true zurück, wenn die Zeichenfolge auf der rechten Seite mit dem regulären Ausdruck auf der linken Seite übereinstimmt.
/zen/ === "practice zazen today" # Output: => true
# is similar to
"practice zazen today"=~ /zen/
Der einzige relevante Unterschied zwischen den beiden obigen Beispielen ist, dass bei einer Übereinstimmung, ===
gibt true zurück und =~
gibt eine ganze Zahl zurück, was in Ruby ein Wahrheitswert ist. Wir werden bald darauf zurückkommen.