# Novellino chiede chiarimento

**URL:** <https://www.ruby-forum.com/t/novellino-chiede-chiarimento/120578>\
**Category:** IT\
**Created:** [November 18, 2007, 8:25pm UTC](https://www.ruby-forum.com/t/novellino-chiede-chiarimento/120578 "2007-11-18T20:25:37Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![fixxxer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/ea666f/32.png) [@fixxxer](https://www.ruby-forum.com/u/fixxxer)\
**Post date:** [November 18, 2007, 8:25pm UTC](https://www.ruby-forum.com/t/novellino-chiede-chiarimento/120578/1 "2007-11-18T20:25:37Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![fixxxer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/ea666f/32.png) [@fixxxer](https://www.ruby-forum.com/u/fixxxer)\
**Post date:** [November 19, 2007, 8:29am UTC](https://www.ruby-forum.com/t/novellino-chiede-chiarimento/120578/2 "2007-11-19T08:29:23Z")

</div>

Ciao,

On Nov 18, 2007 8:25 PM, Matteo F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
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

---

<div class="post-metadata">

**Author:** ![fixxxer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/ea666f/32.png) [@fixxxer](https://www.ruby-forum.com/u/fixxxer)\
**Post date:** [November 19, 2007, 1:30pm UTC](https://www.ruby-forum.com/t/novellino-chiede-chiarimento/120578/3 "2007-11-19T13:30:23Z")

</div>

FEj wrote:

> Ciao,
> 
> On Nov 18, 2007 8:25 PM, Matteo F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
> 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 🙂

Thanx

---

<div class="post-metadata">

**Author:** ![fixxxer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/ea666f/32.png) [@fixxxer](https://www.ruby-forum.com/u/fixxxer)\
**Post date:** [November 19, 2007, 2:13pm UTC](https://www.ruby-forum.com/t/novellino-chiede-chiarimento/120578/4 "2007-11-19T14:13:03Z")

</div>

— Matteo F. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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 🙂

> 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](http://www.goto10.it)  
blog it: [http://riffraff.blogsome.com](http://riffraff.blogsome.com)  
blog en: [http://www.riffraff.info](http://www.riffraff.info)

```
  ___________________________________________________________

```

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

---

<div class="post-metadata">

**Author:** ![fixxxer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/f/ea666f/32.png) [@fixxxer](https://www.ruby-forum.com/u/fixxxer)\
**Post date:** [November 19, 2007, 3:30pm UTC](https://www.ruby-forum.com/t/novellino-chiede-chiarimento/120578/5 "2007-11-19T15:30:05Z")

</div>

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!
