Die Antwort zu einem ähnlichen question ist falsch.
Methodenaufrufe sind weder in der Dokumentation noch in Community-Wiki .
or
or
scheint eine niedrigere Priorität zu haben als ein Methodenaufruf ohne Klammern:
entspricht
%Vor% und zeigt false
an.
HINWEIS: Ich weiß, dass or
nicht verwendet werden sollte. Dennoch ist es ein gutes Beispiel, um zu zeigen, dass einige Operatoren einen niedrigeren Vorrang haben als Methodenaufrufe.
||
entspricht
%Vor% und zeigt true
an.
Die Klammern für den Methodenaufruf scheinen nicht zu gruppieren:
%Vor%Wo sollten Methodenaufrufe mit und ohne Klammern in dieser Rangfolge Tabelle stehen ?
Ich suche nach der genauen Position von Methodenaufrufen in der Tabelle. Vorzugsweise mit Beispielen, die beweisen, dass es niedriger ist als das vorherige und höher als das vorherige.
Die aktuellen Antworten scheinen auch Methodenaufrufe mit Klammern nicht zu erwähnen.
Vielen Dank im Voraus!
Dies zielt darauf ab, alle möglichen Szenarien zu testen.
Beachten Sie, wenn Sie sagen, dass "operator X
eine höhere Priorität hat als der Methodenaufruf" , ist das in Argumenten gemeint. Aka:
im Gegensatz zu (Aufruf am Objekt)
%Vor%Im zweiten Fall haben Methodenaufrufe immer eine höhere Priorität.
Es passt nicht:
SyntaxError
in einigen Fällen rescue
, aber niedriger als die Zuweisung not
kann nicht unabhängig von eckigen Klammern ()
) mit Methodenaufrufen verursacht manchmal SyntaxError
. Diese Fälle sind: and
, or
, if
, unless
, until
, while
und rescue
.
and
, or
, postfix if
, unless
, until
, while
, rescue
haben eine höhere Priorität als der Methodenaufruf Lass es uns versuchen:
%Vor%Zuerst unär:
%Vor%Punkte vergeben:
not
nach einem Methodenaufruf ist ein SyntaxError
Jetzt binär:
%Vor%Punkte vergeben:
and
oder or
ist ein SyntaxError
and
und or
weiter ohne Klammern ..
und ...
Aufruf <=>
. Das müssen wir weiter testen &&
, ||
, ==
, !=
, Modifikator rescue
, if
, unless
, until
, %Code%
Punkte vergeben:
while
und and
haben eine niedrigere Priorität ohne Klammern or
, &&
, ||
und ==
haben unabhängig von Klammern Punkte vergeben:
!=
und ..
haben unabhängig von Klammern Punkte vergeben:
...
, if
, unless
, until
verursachen eine while
Punkte vergeben:
SyntaxError
verursachen ein rescue
SyntaxError
hat eine niedrigere Priorität, wenn keine Klammern vorhanden sind Ternär:
%Vor%Punkte vergeben:
Zuweisung (links für zuletzt, da sich rescue
und yes
ändern):
Punkte vergeben:
Beachten Sie, dass no
und dergleichen nur Verknüpfungen für +=
und +
sind, so dass sie dasselbe Verhalten aufweisen.
Aktualisierung, um die Frage tatsächlich zu beantworten.
Offiziell haben Methoden keinen Vorrang. Wie Sie jedoch zeigen, können wir sie in die Rangfolge-Liste einordnen und sie liegen zwischen dem, was wir als "Operatoren" betrachten könnten, und dem, was wir als "Kontrollfluss" -Schlüsselwörter betrachten könnten.
Siehe Ссылка
Was mit Operatoren beginnt und endet mit Kontrollflusskonstrukten wie
%Vor% Der einzige seltsame Ball ist defined?
, von dem ich nicht verstehe, warum er sowieso nicht als globale Funktion für das Kernel
Modul definiert wurde.
raise
, loop
, catch/throw
und andere fehlen?
Sie sind keine Schlüsselwörter, sondern Methodenaufrufe, die im Modul module_function
als Kernel
definiert sind. Und da dieses Modul in Object
enthalten ist, werden sie zu privaten Methoden aller Klassen und erscheinen daher als globale Funktionen, die überall verfügbar sind.
Hoffe, dass hilft, die Frage zu beantworten. Entschuldigung für das Original copypasta.
Tags und Links ruby methods operator-precedence precedence