Novellino chiede chiarimento

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 :stuck_out_tongue: ) 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.

Ciao,

On Nov 18, 2007 8:25 PM, Matteo F. [email protected]
wrote:

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
prova con
input=gets.chomp.to_i

Ciao,
FEj

FEj wrote:

Ciao,

On Nov 18, 2007 8:25 PM, Matteo F. [email protected]
wrote:

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
prova con
input=gets.chomp.to_i

Ciao,
FEj

Grazie 1000,anche se non e’ un metodo alternativo questa tecnica
funziona alla grande!
Scemo io che non ci ho pensato :slight_smile:

Thanx

— Matteo F. [email protected] wrote:

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.

benvenuto a bordo :slight_smile:

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?

già ti hanno detto che ti basta fare gets.chomp.to_i,
ma per completezza ti segnalo che puoi fare anche solo
int = gets.to_i
perché to_i cerca di convertire anche cose che non
sono precisamente numeri (ie. con lettere dopo i
numeri). e restituisce zero se la stringa non ha senso
come numero (‘pippo’.to_i == 0).

D’altro canto, il metodo Kernel::Integer() effettua la
conversione in modo opposto, generando un’eccezione se
la stringa non è formata perfettamente, che può
aiutarti a evitare degli errori.

Infine, si, c’è un metodo per parsare argomenti
direttamente: scanf(format_string), nel modulo
scanf.rb.


Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info

  ___________________________________________________________

Want ideas for reducing your carbon footprint? Visit Yahoo! For Good
http://uk.promotions.yahoo.com/forgood/environment.html

Perfetto funziona!!!
infatti la conversione a intero ignora il \n del gets e lo converte
senza errori(la mia paura era che nel convertire per esempio “3\n” mi
ritornasse errore!)

Grazie mille per il supporto!