Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Wertzuweisungsoperators steht. Zweitens sind Wertzuweisungsoperatoren rechtsassoziativ. Die Verknüpfung dieser beiden Sätze sorgt dafür, dass Ausdrücke wie der folgende funktionieren:
x = y = z = 0 # Den Variablen x, y und z null zuweisen.
x = (y = (z = 0)) # Dieser äquivalente Ausdruck zeigt die Ausführungsreihenfolge.
    Drittens sollten Sie beachten, dass Wertzuweisung einen sehr niedrigen Rang besitzt. Die Rangfolgenregeln besagen, dass so gut wie alles, das auf einen Wertzuweisungsoperator folgt, ausgewertet wird, bevor die Zuweisung ausgeführt wird. Die Hauptausnahmen sind die Operatoren
and
,
or
und
not
.
    Beachten Sie zuletzt, dass Wertzuweisungsoperatoren nicht als Methoden definiert werden können, dass die zusammengesetzten Zuweisungsoperatoren wie etwa
+=
jedoch neu definierbare Operatoren wie
+
verwenden. Die Neudefinition des Operators
+
beeinflusst nicht die vom
+=
-Operator durchgeführte Wertzuweisung, aber die von ihm ausgeführte Addition.
    4.6.12 Der Operator defined?
    defined?
ist ein unärer Operator, der prüft, ob sein Operand definiert ist oder nicht. Normalerweise löst die Verwendung einer undefinierten Variablen oder Methode eine Ausnahme aus. Wenn der Ausdruck auf der rechten Seite des Operators
defined?
eine undefinierte Variable oder Methode verwendet (einschließlich Operatoren, die als Methoden definiert sind), gibt
defined?
einfach
nil
zurück. Entsprechend gibt
defined?
auch
nil
zurück, wenn der Operand ein Ausdruck ist, der
yield
oder
super
in einem unpassenden Kontext verwendet (z.B. wenn es keinen Block für
yield
oder keine Oberklassenmethode zum Aufrufen gibt). Es ist wichtig, zu verstehen, dass der Ausdruck, der als Operand von
defined?
verwendet wird, nicht richtig ausgewertet wird; es wird lediglich geprüft, ob er ohne Fehler ausgewertet werden könnte . Hier sehen Sie einen typischen Einsatz des Operators
defined?
:
# f(x) berechnen, aber nur, wenn sowohl f als auch x definiert sind.
y = f(x) if defined? f(x)
    Wenn der Operand definiert ist, liefert der Operator
defined?
einen String zurück. Der Inhalt des zurückgegebenen String ist in der Regel unwichtig; was zählt, ist, dass es sich um einen true-Wert handelt – weder
nil
noch
false
. Es ist allerdings möglich, den von diesem Operator zurückgegebenen Wert zu untersuchen, um etwas über den Typ des Ausdrucks auf der rechten Seite zu erfahren. Tabelle 4.3 listet die möglichen Rückgabewerte dieses Operators auf.
    Tabelle 4.3 Rückgabewerte des Operators defined?
    Ausdruckstyp des Operanden
Rückgabewert
Referenz auf eine definierte lokale Variable
"local-variable"
Referenz auf eine definierte lokale Blockvariable (nur Ruby 1.8)
"local-variable(in-block)"
Referenz auf eine definierte globale Variable
"global-variable"
Spezielle globale Variablen für reguläre Ausdrücke,
$&
,
$+
,
$`
,
$'
und
$1
bis
$9
, wenn diese nach einem gefundenen Treffer definiert werden (nur Ruby 1.8)
Name der Variablen als String
Referenz auf eine definierte Konstante
"constant"
Referenz auf eine definierte Instanzvariable
"instance-variable"
Referenz auf eine definierte Klassenvariable
"class variable"
(beachten: Kein Bindestrich)
nil
"nil"
(beachten: dies ist ein String)
true
,
false
"true"
,
"false"
self
"self"
yield
, wenn ein Block vorhanden ist (siehe auch
Kernel
-Methode
block_given?
)
"yield"
super
in einem erlaubten Kontext
"super"
Wertzuweisung (wird nicht wirklich ausgeführt)
"assignment"
Methodenaufruf einschließlich Operatoren, die als Methoden definiert sind (Methode wird nicht wirklich aufgerufen und braucht nicht die korrekte Anzahl von Argumenten zu haben; siehe auch
Object.respond_to?
)
"method"
Jeder andere gültige Ausdruck, einschließlich Literalen und eingebauten Operatoren
"expression"
Jeder Ausdruck, der einen undefinierten Variablen- oder Methodennamen verwendet, oder
yield
oder
super
, die nicht erlaubt sind
nil
    Der Operator
defined?
hat einen sehr niedrigen Rang. Wenn Sie prüfen möchten, ob zwei Variablen definiert sind, verwenden Sie
and
statt
&&
:
defined? a and defined? b # Funktioniert
defined? a && defined? b # Ausgewertet als: defined?((a && defined? b))
    4.6.13 Anweisungsmodifizierer
    rescue
,
if
,
unless
,
while
und
until
sind Fallentscheidungs-, Schleifen- und Ausnahmebehandlungsanweisungen, die den Steuerungsablauf eines Ruby-Programms beeinflussen. Sie können auch als Anweisungsmodifizierer verwendet werden, und zwar in Code wie diesem:
print x if x
    In dieser Modifiziererform können sie

Weitere Kostenlose Bücher