Es ist wichtig, das Komma zu betonen ( ,
) in einer when
Klausel. Sie dient als ||
eines if
Anweisung, d.h. sie führt eine OR Vergleich und nicht eine UND Vergleich zwischen den abgegrenzten Ausdrücken der when
Klausel. Siehe die folgende Fallanweisung:
x = 3
case x
when 3, x < 2 then 'apple'
when 3, x > 2 then 'orange'
end
=> "apple"
x
nicht kleiner als 2 ist, aber der Rückgabewert ist "apple"
. Warum? Weil x
war 3 und seit ',`` acts as an
|| , it did not bother to evaluate the expression
x < 2'.
Man könnte meinen, dass die Durchführung einer UND Sie können so etwas wie das Folgende tun, aber es funktioniert nicht:
case x
when (3 && x < 2) then 'apple'
when (3 && x > 2) then 'orange'
end
=> nil
Es funktioniert nicht, weil (3 && x > 2)
wird zu true ausgewertet, und Ruby vergleicht den Wert True mit x
con ===
was nicht wahr ist, da x
ist 3.
Um eine &&
Vergleich, müssen Sie die case
wie ein if
/ else
Block:
case
when x == 3 && x < 2 then 'apple'
when x == 3 && x > 2 then 'orange'
end
Im Buch Ruby Programming Language sagt Matz, dass diese letztere Form die einfache (und selten verwendete) Form ist, die nichts anderes als eine alternative Syntax für if
/ elsif
/ else
. Unabhängig davon, ob sie nur selten benutzt wird oder nicht, sehe ich keine andere Möglichkeit, mehrere &&
Ausdrücke für eine bestimmte when
Klausel.