Ruby - Gamme

Gli intervalli si verificano ovunque: da gennaio a dicembre, da 0 a 9, righe da 50 a 67 e così via. Ruby supporta gli intervalli e ci consente di utilizzare gli intervalli in una varietà di modi:

  • Intervalli come sequenze
  • Intervalli come condizioni
  • Intervalli come intervalli

Intervalli come sequenze

Il primo e forse il più naturale uso degli intervalli è esprimere una sequenza. Le sequenze hanno un punto iniziale, un punto finale e un modo per produrre valori successivi nella sequenza.

Ruby crea queste sequenze usando il ''..'' e ''...''operatori di intervallo. Il modulo a due punti crea un intervallo inclusivo, mentre il modulo a tre punti crea un intervallo che esclude il valore alto specificato.

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

La sequenza 1..100 viene mantenuta come un oggetto Range contenente riferimenti a due oggetti Fixnum . Se necessario, puoi convertire un intervallo in un elenco utilizzando il metodo to_a . Prova il seguente esempio:

#!/usr/bin/ruby

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

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

Questo produrrà il seguente risultato:

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

Gli intervalli implementano metodi che ti consentono di iterarli e testarne i contenuti in vari modi:

#!/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

Questo produrrà il seguente risultato:

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

Intervalli come condizioni

Gli intervalli possono essere utilizzati anche come espressioni condizionali. Ad esempio, il seguente frammento di codice stampa serie di righe dallo standard input, dove la prima riga di ogni serie contiene l' inizio della parola e l'ultima riga la parola finisce -

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

Gli intervalli possono essere utilizzati nelle istruzioni case -

#!/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

Questo produrrà il seguente risultato:

Pass with Merit

Intervalli come intervalli

Un utilizzo finale della gamma versatile è come test a intervalli: vedere se qualche valore rientra nell'intervallo rappresentato dalla gamma. Questo viene fatto usando ===, l'operatore di uguaglianza tra maiuscole e minuscole.

#!/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

Questo produrrà il seguente risultato:

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