nil || false
gibt false
zurück und false || nil
gibt nil
zurück. Hat jemand eine Erklärung dafür?null || falsch und falsch || Null in Rubin
Antwort
In Ruby ist alles ein Ausdruck, und ein Ausdruck gibt den letzten Wert zurück, der darin ausgewertet wird.
Für beide Beispiele wird die linke Seite des ||
Ausdrucks zu einem falschen Wert ausgewertet, also wertet Ruby die rechte Seite aus und gibt sie zurück.
Ihre Erklärung ist wirklich klar, danke! – user1538814
||
gibt das Ergebnis des letzten ausgewerteten Ausdrucks zurück. Wenn es die LHS auswertet und einen true
Wert findet, erhalten Sie die LHS; Andernfalls erhalten Sie die RHS (egal, was diese RHS sein könnte).
Das war eine wirklich gute Erklärung, danke! – user1538814
Wie die anderen darauf hingewiesen haben, wertet ||
zuerst den Ausdruck auf der linken Seite aus. Wenn es "wahr" ist (alles außer false
oder nil
), gibt es das zurück. Andernfalls wertet es den Ausdruck auf der rechten Seite aus und gibt ihn zurück (egal, was es ist).
Dies macht ||
nützlich für viel mehr als nur boolesche Tests. Zum Beispiel habe ich es nur den anderen Tag, wenn einige Codes für die chronic
gem Schreiben:
@now = options[:now] || Chronic.time_class.now
Das bedeutet: „Wenn der options
Hash einen :now
Wert enthält, zu speichern, die in @now
Ansonsten fallen zurück auf Chronic.time_class.now
. als Standard ". Ich bin sicher, dass Sie viele mögliche Anwendungen in Ihren eigenen Programmen finden können.
&&
ist analog: Es bewertet zuerst den Ausdruck auf der linken Seite, und wenn es false
oder nil
auswertet, gibt es das zurück. Andernfalls wertet es den Ausdruck auf der rechten Seite aus und gibt ihn zurück (egal, was es ist).
Dies bedeutet &&
ist auch nützlich für viel mehr als nur boolesche Tests. Sie können es verwenden, um zwei Codezeilen in eine zu komprimieren. Zum Beispiel:
do_something && do_something_else
(Das nur, dass der Rückgabewert von do_something
nie sein wird false
oder nil
wenn Sie wissen, funktioniert!)
Sie auch &&
quetschen ein „Wächter“ Ausdruck auf derselben verwenden können Linie als das, was es ist "Bewachung":
unless message.nil?
send_message(message)
end
:
message && send_message(message)
welche ersetzen könnte
Ich lerne immer noch Rubin, aber das ist wirklich hilfreich. – user1538814
- 1. SQL: Richtig/Falsch/Null-Summe eines Bitfeld
- 2. Kann selbst jemals falsch oder Null sein?
- 3. Beziehungen Rückkehr falsch/Null-Daten (Laravel 5.2)
- 4. Resharper "Die Bedingung (Projekt! = Null) ist falsch"
- 5. Null-Datensätze, die Else-Anweisung falsch auslösen
- 6. Warum 'Funktionsadresse == NULL' anstelle von 'falsch' verwenden?
- 7. Was ist falsch mit diesem Null-Check?
- 8. Ruby on Rails ternären Operator zu BEIDE Null und falsch
- 9. In Datatable Excel Export Null Wert kommt falsch in PHP
- 10. Rubin falsch analysiert 2-stellige Jahr
- 11. Warum falsch == "falsch" ist falsch?
- 12. C# ist Operator mit NULL-Typen immer falsch nach ReSharper
- 13. SQL zum Sortieren boolescher Spalten als wahr, null, falsch
- 14. Was ist falsch daran, nullable double auf null zu setzen?
- 15. MySQL Select Rückkehr falsch NULL-Wert mit COUNT
- 16. Coredata fetchRequest mit Prädikat überspringt falsch NULL-Werte
- 17. Warum denkt ReSharper, dass "thread.Name == null" immer falsch ist?
- 18. Jacson-Parser: Unbekanntes Token 'tieheT': erwartete 'null', 'wahr' oder 'falsch'
- 19. Vergleich Datum mit Null fehlgeschlagen - Rubin
- 20. Null/Objekt und Null/Null Vergleich Effizienz
- 21. Rubin Array für null Array Überprüfung
- 22. PHP array_key_exists Zurückkehren FALSCH falsch
- 23. Warum @ ($ null) ist $ false, aber @ ($ null, $ null) ist $ true?
- 24. falsch mysql Ausgang
- 25. Unterschied zwischen null default null und default null in mysql?
- 26. Unterschied zwischen NULL und Null in PHP
- 27. Falsch/nicht funktional serialisierbar
- 28. DateTime.ParseExact falsch Monat gibt
- 29. Wie hive gegeben finden Dezimalwert ist falsch definiert dezimal Typ und geben NULL zurück
- 30. Objective-C WAHR/FALSCH vs wahr/falsch
Für Bonuspunkte erklären warum 'nil || falsch und falsch || nil' ergibt false – pguardiario
@pguardiario http://stackoverflow.com/questions/1840488/operator-precedence-for-and-in-ruby – x1a4