Ruby && vs. Und
Für boolesche Ausdrücke oder Flusskontrolle können sowohl &&
als auch and
verwendet werden.
Der Unterschied zwischen ihnen ist die Rangfolge. Der Operator and
hat einen niedrigeren Vorrang als =
, während &&
einen höheren Vorrang als der Operator =
hat.
Betrachten Sie diese beiden booleschen Ausdrücke.
puts var_1 = true && false
puts var_2 = true and false
Ausgabe:
false
true
Beide Ausdrücke geben false
zurück, aber var_1
und var_2
werden unterschiedliche Werte zugewiesen.
var_1 = true && false
ist äquivalent zu var_1 = (true && false)
, var_1
ist gleich false
.
Im Gegensatz dazu wird var_2 = true und false
als (var_2 = true) und false
ausgewertet. Das bedeutet, dass var_2
irgendwann den Wert true
enthält.
puts var_1
puts var_2
Ausgabe:
false
true
Verwenden Sie deshalb niemals and
mit einem solchen ternären Operator.
s = true and 2.even? ? 'even' : 'odd'
puts s
Ausgabe:
true
Wir können erwarten, dass es even
druckt, aber stattdessen gibt es true
zurück.