Programmierung in Ruby

Der Leitfaden der Pragmatischen Programmierer

class Range
Parent: Object
Version: 1.6

Index:

new === begin each end exclude_end? first last length size


Ein Range (dt. Bereich, d.Red.) repräsentiert ein Intervall--- einen Satz von Werten mit einem Beginn und einem Ende. Ein Range wird unter Verwendung der s..e oder s...e Symbole bzw. mit Range.new konstruiert. Mit .. konstruierte Bereiche laufen vom Beginn bis zum Ende inklusive des Endwerts, während Bereiche, die mit ... konstruiert wurde, den Endwert nicht enthalten. Als Iterator gebraucht, geben Range-Objekte jeden Wert in der Sequenz zurück.

(-1..-5).to_a » []
(-5..-1).to_a » [-5, -4, -3, -2, -1]
('a'..'e').to_a » ["a", "b", "c", "d", "e"]
('a'...'e').to_a » ["a", "b", "c", "d"]

Ein Range kann aus einem beliebigen Objekttyp erstellt werden, solange die Objekte mit Hilfe ihres <=>-Operators verglichen werden können und sie die succ-Methode definieren, die das nächste Objekt in der Sequenz liefert.

class Xs                # represent a string of 'x's
  include Comparable
  attr :length
  def initialize(n)
    @length = n
  end
  def succ
    Xs.new(@length + 1)
  end
  def <=>(other)
    raise TypeError unless other.kind_of? Xs
    @length <=> other.length
  end
  def inspect
    'x' * @length
  end
end
r = Xs.new(3)..Xs.new(6) » xxx..xxxxxx
r.to_a » [xxx, xxxx, xxxxx, xxxxxx]
r.member?(Xs.new(5)) » true

mixins
Enumerable: collect, detect, each_with_index, entries, find, find_all, grep, include?, map, max, member?, min, reject, select, sort, to_a

class methods
new Range.new( start, end, exclusive=false ) -> einBereich

Konstruiert einen Bereich mit den angegebenen start- und end-Werten. Wenn der dritte Parameter weggelassen wird oder false ist, enthält der Bereich das End-Objekt, sonst wird es weggelassen.

instance methods
=== rng === einObjekt-> true oder false

Gibt true zurück, wenn einObjekt ein Element aus rng ist, sonst false. Vereinbarungsgemäß ist === der Vergleichsoperator, der in case-Anweisungen verwendet wird (sog. Fallgleichheit, d.Red.).

case 79
when 1..50   then   print "low\n"
when 51..75  then   print "medium\n"
when 76..100 then   print "high\n"
end
produces:
high

begin rng.begin -> einObjekt

Gibt das erte Objekt in rng zurück.

each rng.each {| i | block }-> rng

Durchläuft alle Elemente in rng und gibt jede von ihnen an den Codeblock weiter.

(10..15).each do |n|
   print n, ' '
end
produces:
10 11 12 13 14 15

end rng.end -> einObjekt

Gibt das Objekt zurück, das das Ende von rng darstellt. Siehe auch Range#length.

(1..10).end » 10
(1...10).end » 10

exclude_end? rng.exclude_end? -> true oder false

Gibt true zurück, wenn der Endwert in rng ausgeschlossen ist.

first rng.first -> einObjekt

Gibt das erste Objekt in rng zurück.

last rng.last -> einObjekt

Synonym für Range#end.

length rng.length -> einInteger

Gibt die Anzahl der Objekte in rng zurück.

(1..10).length » 10
(1...10).length » 9

size rng.size -> einInteger

Synonym für Range#length.


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Übersetzung: Carsten Schinzer
Für das englische Original:
© 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0. That reference is available for download.
Diese Lizenz sowie das Original vom Herbst 2001 bilden die Grundlage der Übersetzung
Es wird darauf hingewiesen, dass sich die Lizenz des englischen Originals inzwischen geändert hat.
Für die deutsche Übersetzung:
© 2002 Jürgen Katins
Der Copyright-Eigner stellt folgende Lizenzen zur Verfügung:
Nicht-freie Lizenz:
This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.
Freie Lizenz:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".