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.