Uso di gets

Salve a tutti!!!
La domanda e’ la seguente:
Perche’ se scrivo

n=6
def fact(n)
if n==0
1
else
nfact(n-1)
end
end
puts fact(n)

Mi da’ il risultato giusto.Mentre se scrivo:

puts ‘Scrivi un numero’
puts ’ ’
n=gets
def fact(n)
if n==0
1
else
n
fact(n-1)
end
end
puts fact(n)

Mi da’ il seguente errore:
undefined method `-’ for #String:0x3468f4 (NoMethodError)
Dove e’ che sbaglio?

Grazie dell’eventuale risposta.

puts fact(n)

Mi da’ il seguente errore:
undefined method `-’ for #String:0x3468f4 (NoMethodError)
Dove e’ che sbaglio?

Prova a fare un cast da stringa ad intero simile a questo.

n = gets.to_i
def fact(n)
if n==0

Bye!

Andrea R. wrote:

puts fact(n)

Mi da’ il seguente errore:
undefined method `-’ for #String:0x3468f4 (NoMethodError)
Dove e’ che sbaglio?

Prova a fare un cast da stringa ad intero simile a questo.

n = gets.to_i
def fact(n)
if n==0

Bye!

Grazie Andrea. Adesso funziona!
Ma non capisco perche’ devo fare cosi’…forse perche’ n e’ considerato
come una string?
Mi leggero’ meglio i manuali… :slight_smile:
Ciao e obrigado!!

2008/9/17 Giovanni C. [email protected]:

[…]
Ma non capisco perche’ devo fare cosi’…forse perche’ n e’ considerato
come una string?

sì, gets restituisce sempre una stringa; se vuoi un numero devi
convertirla, con .to_i.

esempio: “3” è una stringa.
“3”.to_i dà come risultato 3 (numero).