Die Programmiersprache Ruby (German Edition)
ihn auszugeben:
puts x,y=1,2
Der erfüllt jedoch nicht die gewünschte Aufgabe; Ruby denkt, dass Sie die Methode
puts
mit drei Argumenten aufrufen:
x
,
y=1
und
2
. Als Nächstes könnten Sie versuchen, die parallele Wertzuweisung zwecks Gruppierung in Klammern zu setzen:
puts (x,y=1,2)
Auch das funktioniert nicht; die Klammern werden als Teil des Methodenaufrufs interpretiert (auch wenn Ruby sich über das Leerzeichen zwischen dem Methodennamen und der öffnenden Klammer beschwert). Um tatsächlich die gewünschte Operation durchzuführen, müssen Sie verschachtelte Klammern verwenden:
puts((x,y=1,2))
Dies ist einer jener seltsamen Grenzfälle in der Ruby-Grammatik, die aufgrund ihrer Ausdrucksstärke entstehen. Glücklicherweise kommt der Bedarf nach Syntax wie dieser nur selten auf.
----
4.5.5.7 Der Wert der parallelen Wertzuweisung
Der Rückgabewert einer parallelen Wertzuweisung ist das Array aller Rvalues (nachdem sie durch eventuelle Splat-Operatoren zusammengefügt wurden).
4.6 Operatoren
Ein Operator ist ein Token in der Sprache Ruby, das eine Operation repräsentiert (etwa eine Addition oder einen Vergleich), die mit einem oder mehreren Operanden durchgeführt wird. Die Operanden sind Ausdrücke, und Operatoren ermöglichen uns die Kombinationen dieser Operandenausdrücke zu größeren Ausdrücken. Das numerische Literal
2
und der Operator
+
können zu dem Ausdruck
2+2
kombiniert werden. Und der nachfolgende Ausdruck kombiniert ein numerisches Literal, einen Methodenaufrufausdruck und einen Variablenreferenzausdruck mit dem Multiplikationsoperator und dem Operator »kleiner als«:
2 * Math.sqrt(2) < limit
Tabelle 4.2 weiter unten in diesem Abschnitt fasst alle Ruby-Operatoren zusammen, und die nachfolgenden Abschnitte beschreiben jeden einzelnen detailliert. Um Operatoren vollständig zu verstehen, müssen Sie jedoch ihre Stelligkeit, Rangfolge und Assoziativität verstehen.
Die Stelligkeit (englisch arity ) eines Operators ist die Anzahl der Operanden, mit denen er operiert. Unäre Operatoren erwarten einen einzelnen Operanden. Binäre Operatoren erwarten zwei Operanden. Ternäre Operatoren (es gibt nur einen davon) erwarten drei Operanden. Die Stelligkeit jedes Operators wird in Spalte N von Tabelle 4.2 aufgelistet. Beachten Sie, dass die Operatoren
+
und
-
sowohl unäre als auch binäre Formen haben.
Die Rangfolge ( precedence ) eines Operators bestimmt, wie »eng« ein Operator an seine Operanden gebunden ist, und beeinflusst die Reihenfolge, in der ein Ausdruck ausgewertet wird. Betrachten Sie beispielsweise diesen Ausdruck:
1 + 2 * 3 # => 7
Der Multiplikationsoperator besitzt einen höheren Rang als der Additionsoperator, so dass die Multiplikation zuerst ausgeführt wird und der Ausdruck 7 ergibt. Tabelle 4.2 ist nach Rangfolge von den höchstrangigsten bis zu den niedrigstrangigsten Operatoren sortiert. Beachten Sie, dass es sowohl hoch- als auch niedrigwertige Operatoren für die Boolean-Operationen AND, OR und NOT gibt.
Die Operatorenrangfolge legt nur die Standardauswertungsreihenfolge für einen Ausdruck fest. Sie können jederzeit Klammern verwenden, um Teilausdrücke zu gruppieren und Ihre eigene Auswertungsreihenfolge zu bestimmen:
(1 + 2) * 3 # => 9
Die Assoziativität ( associativity ) eines Operators gibt die Auswertungsreihenfolge an, wenn derselbe Operator (oder Operatoren mit demselben Rang) mehrmals hintereinander in einem Ausdruck vorkommen. Die Spalte A von Tabelle 4.2 gibt die Assoziativität jedes Operators an. Der Wert L bedeutet, dass Ausdrücke von links nach rechts ausgewertet werden. Der Wert R bedeutet, dass Ausdrücke von rechts nach links ausgewertet werden. Und der Wert N besagt, dass der Operator nichtassoziativ ist und ohne Klammern, die die Auswertungsreihenfolge festlegen, nicht mehrmals in einem Ausdruck verwendet werden kann.
Die meisten arithmetischen Operatoren sind linksassoziativ, was bedeutet, dass
10−5−2
als
(10−5)−2
und nicht als
10−(5−2)
ausgewertet wird. Potenzierung ist dagegen rechtsassoziativ, so dass
2**3**4
als
2**(3**4)
ausgewertet wird. Wertzuweisung ist ein weiterer rechtsassoziativer Operator. In dem Ausdruck
a=b=0
wird der Wert
0
zuerst der Variablen
b
zugewiesen. Dann wird der Wert dieses Ausdrucks (ebenfalls
0
) der Variablen
a
zugewiesen.
Tabelle 4.2 Ruby-Operatoren nach Rangfolge (von der höchsten zur niedrigsten), mit Stelligkeit (N), Assoziativität (A) und Definierbarkeit (M)
Operator(en)
N
A
M
Operation
! ~
Weitere Kostenlose Bücher