Frage

Ich frage mich, warum Rubin and geben, or weniger Priorität als &&, || und Operator zuweisen? Gibt es einen Grund?

War es hilfreich?

Lösung

Meine Vermutung ist, das ist eine direkte Übertragung aus Perl. Die Betreiber or und and wurden später in Perl 5 für bestimmte Situationen hinzugefügt wurden niedrigere Priorität gewünscht wurde.

Zum Beispiel in Perl, hier wünschen 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 der || nicht vorging Teil der Aktion verschlingen. Perl 5 eingeführt or, eine neue Version von ||, die niedrige Priorität hat, für genau diesen Zweck.

Ein Beispiel in Ruby, wo man or verwenden könnte, aber nicht ||:

value = possibly_false or raise "foo"

Wenn Sie || verwendet, wäre es ein Syntaxfehler sein.

Andere Tipps

Der Unterschied ist, Vorrang. || haben && höhere Priorität als =, aber and, or niedriger haben. So, während Sie tun können:

a = nil || 0

Sie müßten tun:

a = (nil or 0)

gleichen Effekt zu erzielen. Wenn Sie das tun:

a = nil or 0

Das Ergebnis des Ausdrucks wäre immer noch 0, aber ein Wert wäre gleich Null.

Sie haben eine sehr niedrige Priorität, so dass die Operanden müssen in Klammern nicht gewickelt werden, wie es manchmal mit && und || der Fall ist.

Die Möglichkeit, die Priorität Ihrer Betreiber zu steuern manchmal nützlich, vor allem, wenn Sie mit der Lesbarkeit betrifft -. Zusätzliche Klammer in bedingten Anweisungen kann manchmal die eigentliche Logik verschleiern,

Um ehrlich zu sein, aber ich denke, der Grund, Ruby hat die Booleschen Operator Vorrang Ebenen tut es ergibt sich vor allem aus der Tatsache, dass Matz ein Perl-Programmierer war, bevor er jemals Rubin schrieb, und ein großer Teil der Kernsyntax entlehnt und Betreiber von derjenigen Sprache.

Ich glaube, die Idee speziell, um sie unter den Zuweisungsoperator zu bekommen, so können Sie Logik-Tests mit Zuweisungen aber ohne parens schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top