Rubin - Bereiche

Bereiche treten überall auf: Januar bis Dezember, 0 bis 9, Zeilen 50 bis 67 und so weiter. Ruby unterstützt Bereiche und ermöglicht es uns, Bereiche auf verschiedene Arten zu verwenden -

  • Bereiche als Sequenzen
  • Bereiche als Bedingungen
  • Bereiche als Intervalle

Bereiche als Sequenzen

Die erste und vielleicht natürlichste Verwendung von Bereichen besteht darin, eine Sequenz auszudrücken. Sequenzen haben einen Startpunkt, einen Endpunkt und eine Möglichkeit, aufeinanderfolgende Werte in der Sequenz zu erzeugen.

Ruby erstellt diese Sequenzen mit dem ''..'' und ''...''Bereichsoperatoren. Das Zwei-Punkt-Formular erstellt einen Inklusivbereich, während das Drei-Punkt-Formular einen Bereich erstellt, der den angegebenen hohen Wert ausschließt.

(1..5)        #==> 1, 2, 3, 4, 5
(1...5)       #==> 1, 2, 3, 4
('a'..'d')    #==> 'a', 'b', 'c', 'd'

Die Sequenz 1..100 wird als Range- Objekt gehalten, das Verweise auf zwei Fixnum- Objekte enthält. Bei Bedarf können Sie einen Bereich mit der Methode to_a in eine Liste konvertieren . Versuchen Sie das folgende Beispiel -

#!/usr/bin/ruby

$, =", "   # Array value separator
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a

puts "#{range1}"
puts "#{range2}"

Dies führt zu folgendem Ergebnis:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
["bar", "bas", "bat"]

Bereiche implementieren Methoden, mit denen Sie sie durchlaufen und ihren Inhalt auf verschiedene Weise testen können.

#!/usr/bin/ruby

# Assume a range
digits = 0..9

puts digits.include?(5)
ret = digits.min
puts "Min value is #{ret}"

ret = digits.max
puts "Max value is #{ret}"

ret = digits.reject {|i| i < 5 }
puts "Rejected values are #{ret}"

digits.each do |digit|
   puts "In Loop #{digit}"
end

Dies führt zu folgendem Ergebnis:

true
Min value is 0
Max value is 9
Rejected values are 5, 6, 7, 8, 9
In Loop 0
In Loop 1
In Loop 2
In Loop 3
In Loop 4
In Loop 5
In Loop 6
In Loop 7
In Loop 8
In Loop 9

Bereiche als Bedingungen

Bereiche können auch als bedingte Ausdrücke verwendet werden. Zum Beispiel Der folgenden Codefragment druckt Sätze von Zeilen von der Standardeingabe, wobei die erste Zeile in jedem Satz , das Wort enthält Start- und die letzte Zeile der Wortende -

while gets
   print if /start/../end/
end

Bereiche können in case-Anweisungen verwendet werden -

#!/usr/bin/ruby

score = 70

result = case score
   when 0..40 then "Fail"
   when 41..60 then "Pass"
   when 61..70 then "Pass with Merit"
   when 71..100 then "Pass with Distinction"
   else "Invalid Score"
end

puts result

Dies führt zu folgendem Ergebnis:

Pass with Merit

Bereiche als Intervalle

Eine letzte Verwendung des vielseitigen Bereichs ist ein Intervalltest: Überprüfen, ob ein Wert innerhalb des durch den Bereich dargestellten Intervalls liegt. Dies erfolgt mit ===, dem Gleichheitsoperator für Groß- und Kleinschreibung.

#!/usr/bin/ruby

if ((1..10) === 5)
   puts "5 lies in (1..10)"
end

if (('a'..'j') === 'c')
   puts "c lies in ('a'..'j')"
end

if (('a'..'j') === 'z')
   puts "z lies in ('a'..'j')"
end

Dies führt zu folgendem Ergebnis:

5 lies in (1..10)
c lies in ('a'..'j')