Ich frage mich, warum Ruby geben and
, or
weniger Vorrang als &&
, ||
, und zuweisen Operator? Gibt es einen Grund?Gibt es irgendeine Weisheit hinter "und", "oder" Operatoren in Ruby?
Antwort
Meine Vermutung ist, dass es eine direkte Übertragung von Perl ist. Die Operatoren or
und and
wurden später in Perl 5 für bestimmte Situationen hinzugefügt, in denen eine niedrigere Priorität gewünscht wurde.
Zum Beispiel in Perl, hier wollen wir, dass ||
niedrigere Priorität hatte, so dass wir schreiben können:
try to perform big long hairy complicated action || die ;
und sicher sein, dass die ||
wollte Teil der Aktion nicht verschlingen. Perl 5 eingeführt or
, eine neue Version von ||
, die niedrige Präzedenz für genau diesen Zweck hat.
Ein Beispiel in Ruby, wo Sie or
aber nicht ||
verwenden:
value = possibly_false or raise "foo"
Wenn Sie ||
verwendet, wäre es ein Syntaxfehler sein.
Die Möglichkeit, die Priorität Ihrer Operatoren zu steuern, ist manchmal nützlich, besonders wenn Sie sich mit Lesbarkeit befassen - zusätzliche Klammern in bedingten Anweisungen können manchmal die tatsächliche Logik verdecken.
Um ehrlich zu sein, denke ich, der Grund Ruby hat die boolesche Operator Vorrang Ebenen Ebenen stammt vor allem aus der Tatsache, dass Matz war ein Perl-Programmierer, bevor er jemals schrieb Ruby, und entlehnte viel von der Kern-Syntax und Operatoren aus diese Sprache.
hmm, das erklärt warum Rubin so unreif und gleichzeitig so aufgebläht ist. Immer noch schwer, meinen Kopf darum zu wickeln. – akostadinov
Sie haben eine sehr niedrige Priorität, so dass die Operanden nicht in Klammern eingeschlossen werden müssen, wie es manchmal bei &&
und ||
der Fall ist.
Ich glaube, dass die Idee ist, sie unter den Zuweisungsoperatoren zu bekommen, so dass Sie logische Tests mit Zuweisungen schreiben können, aber ohne Parens.
Der Unterschied hat Vorrang. ||
, &&
haben höhere Priorität als =
, aber and
, or
haben niedrigere. So, während Sie tun können:
a = nil || 0
würden Sie tun müssen:
a = (nil or 0)
gleichen Effekt zu erzielen. Wenn Sie dies tun:
a = nil or 0
Das Ergebnis von Ausdruck wäre immer noch 0, aber ein Wert wäre Null.
- 1. Gibt es irgendeine ScalaConsole?
- 2. Gibt es irgendeine Schlaffunktion?
- 3. Operatoren und Methoden in Ruby
- 4. Gibt es irgendeine Alternative zu Jekyll {{% include%}}?
- 5. Gibt es irgendeine Art von "Ausdrucksklasse" (C++)
- 6. Gibt es irgendeine numpy Gruppe nach Funktion?
- 7. Chaning Ruby Regexp-Operatoren
- 8. Gibt es irgendeine Scala DSL für GUI?
- 9. gibt es irgendeine Beschränkung für ipa-Datei
- 10. Gibt es irgendeine Art von Template-Engine in VB?
- 11. Gibt es irgendeine spezielle Bedeutung von "typedef" in C++?
- 12. Gibt es eine Alternative zur Verwendung mehrerer UND-Operatoren?
- 13. Gibt es irgendeine Operation in C analog zu diesem Assemblercode?
- 14. Gibt es eine Wissenschaft hinter der Vorkompression?
- 15. gibt es irgendeine Funktion wie PHP explode in jquery?
- 16. Gibt es irgendeine Art von Interceptor-Implementierung in SQLite
- 17. Gibt es irgendeine Möglichkeit, Drop-Down in Gojs-Panel?
- 18. Gibt es irgendeine Möglichkeit, Methode innerhalb Foreach-Schleife in Mvc
- 19. Warum gibt es verschiedene Assoziationen unter den Operatoren in C?
- 20. Jshint sagt, es gibt eine Warnung in ternären Operatoren
- 21. Operatoren in Ruby on Rails nicht erkannt
- 22. Gibt es irgendeine Art von Abhängigkeits-Tracer für Asp.Net-Apps?
- 23. Gibt es irgendeine Art von Nicht-Text-Schnittstelle zu MySQL?
- 24. C# Operatoren und Lesbarkeit
- 25. Verständnis Vorrang der Zuweisung und logischer Operatoren in Ruby
- 26. && = und || = Operatoren
- 27. Gibt es irgendeine Abfrage für Cassandra wie SQL: LIKE Condition?
- 28. Unterschied zwischen String-Operatoren + und << in Ruby
- 29. Gibt es irgendeine Methode, libuv mit android NDK zu kompilieren?
- 30. Gibt es iPython-ähnliche Shells für Ruby oder Rails?
Gibt es einen Namen für das Idiom von do_something oder stirb? Wird es in Rubin verwendet? –
Ich kenne keinen Namen dafür, aber es ist ziemlich häufig in Ruby. – Chuck
Perl lehnt sich stark an Würfel, während Ruby Raise verwendet. Der Vorteil einer Ausnahme ist, dass Sie sie retten können. – tadman