Salve a tutti,
sono nuovo su questo forum e sono nuovo per quanto rigaurda la
progrmmazione in Ruby, mi sono avvicinato a questo linguaggio quasi per
caso assistendo ad una conferenza su Capistrano(un’applicazione
realizzata in RoR da SeeSaw) al linux-day(Ferrara) di quest’anno.
La mia esperienza(scolastica) è costituita da Java, mi avvicino quindi a
Ruby con i difetti e le qualità di chi conosceva (anche se poco) questo
linguaggio.
Veniamo ora al mio dubbio,
sto studiando Ruby su “Learn to Program” di Chris P. ed
ovviamente,capitolo per capitolo, mi diverto a realizzare gli esercizi
proposti.
Il dubbio mi è sorto svolgendo l’ultimo esercizio del capitolo 7 in cui
si chiede di realizzare un programma che chieda in input una coppia di
anni (ex 1980-2000) e stampi in output tutti gli anni bisestili presenti
in questo intervallo.
la prima versione del mio programma era questa:
puts ‘gimmie a start year’
partenza=gets.chomp
puts ‘gimmie now an end year’
fine=gets.chomp
while partenza<=fine
if partenza%4==0
puts partenza.to_s+’ is a leap year’
end
partenza=partenza+1
end
puts ‘There are no more leaps year in this range’
L’errore che mi vieniva ritornato era:
leapYear.rb:8:in `+’: can’t convert Fixnum into String (TypeError)
from leapYear.rb:8
Errore che non riuscivo ad interpretare poiche’ non stavo cercando di
convertire interi in Stringhe, casomai il contrario visto che il metodo
gets significa GET STRING…
utilizzando la reflection sono riuscito a risolvere il problema in
questo modo:
puts ‘gimmie a start year’
partenza=gets.chomp
x=partenza.to_i
puts ‘gimmie now an end year’
fine=gets.chomp
y=fine.to_i
while x<=y
if x%4==0
puts x.to_s+’ is a leap year’
end
x=x+1
end
puts ‘There are no more leaps year in this range’
ovvero dovendo ricreare una vaiabile Fixnum per ogni input, questo
perche gets restituisce stringhe.
Dopo questa LUNGHISSIMA(e qui vi chiedo scusa e faccioi complimenti a
chi è arrivato fino a questo punto ) arrivo alla fatidica domanda:
esiste un modo perche’ io fornisca in input un intero e ruby mi
restituisca un intero, per esempio scrivendo
input=gets.chomp
puts input.class
Mi viene detto String(giustamente)
esiste allora un metodo che sostituisca gets per gli input che io so a
priori essere dei numeri(di qualsiasi tipo essi siano) evitando cosi i
passaggi di creazione di nuove variabili?
Vi ringrazio molto per eventuali risposte.