next up previous contents index
Search Next: Throw und Catch Up: Kontrollstrukturen und Wertebereiche Previous: Schleifen und Schleifenkontrolle   Contents   Index


Bereiche

Bereiche haben in Ruby zwei Gesichter. Zum einen erzeugen sie Objekte der Klasse Range, zum anderen dienen sie in logischen Ausdrücken als Schalter.

Bereiche mit zwei Punkten beinhalten ihre beiden Grenzen, bei drei Punkten fällt die obere Grenze weg.

(1..3).to_a   #-> [1, 2, 3]
(1...3).to_a  #-> [1, 2]

Wie immer erlaubt Ruby auch die Konstruktion von Bereichen mit eigenen Objekten, Voraussetzung ist hier, dass die Methoden <=> und succ (Nachfolger) definiert sind.

In logischen Ausdrücken verhalten sich Bereiche wie Ein-/Aus-Schalter:

for a in 1..10
  print ((a==3)..(a==6) ? a : "")
end  #-> 3456

Hier ist der Unterschied zwischen .. und ..., dass die erste Form bei Eintreten der ersten Bedingung auch noch die zweite Bedingung überprüft, so dass ein Ein- und Ausschalten auf einem einzelnen Element möglich ist. Im folgenden Beispiel schalten wir bei Vielfachen von 4 die Pluszeichen ein, beim nächsten Vielfachen von 3 schalten wir sie wieder ab. Der Unterschied wird beim zwölften Zeichen deutlich: In der oberen Version wird für a=12 eingeschaltet, ein + geschrieben und wieder ausgeschaltet, während unten bis a=15 eingeschaltet bleibt.

for a in 1..30
  print ((a%4==0)..(a%3==0) ? "+" : "-")
end  #-> ---+++-++--+---+++-++--+---+++
for a in 1..30
  print ((a%4==0)...(a%3==0) ? "+" : "-")
end  #-> ---+++-++--+++++++-++--+++++++


next up previous contents index
Search Next: Throw und Catch Up: Kontrollstrukturen und Wertebereiche Previous: Schleifen und Schleifenkontrolle   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20