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')