On Thursday 25 January 2007 01:18, Daniele V. wrote:
end
Mi da sempre questo errore :
‘>’ : comparison of String with 10 failed
Inizio proprio bene…
Il problema è che “gets” restituisce un oggetto di tipo “String” (te ne
puoi
accorgere mettendo un “puts number.class” dopo la gets), mentre “>” è un
metodo della classe Fixnum…
Per usare ‘number’ come un numero devi fare un cast di ciò che prende gets
tramite il metodo to_i:
number = gets.to_i
if number > 10
puts “try again”
elsif number == 3
puts “You lose”
else
puts “Enter a number”
end
Ciao a tutti, sto iniziando ad avvicinarmi a Ruby ma non riesco a capire perchè questa piccola porzione di codice non funziona…
number = gets
if number > 10
puts “Try again”
elsif number == 3
puts “You lose”
else
puts “Enter a number”
end
Ciao Daniele,
gets ti restituisce il valore inserito dall’utente come stringa (e con
\n alla fine). Per cui ruby si lamenta del fatto che stai confrontando
una stringa con un numero intero (come confrontare “12\n” e 10).
Usa:
numbers = gets.to_i
Questo converte la stringa ad un numero intero. Ti consiglio anche di
usare irb per provare codice e ri per la documentazione dei vari
metodi.
Ciao,
Antonio
PS: più in generale, per rimuovere il carattere di ritorno a capo da
una stringa, puoi usare il metodo chomp.
Ad essere precisi, il primo oggetto ad essere confrontato è di tipo String
per cui “>” si aspetta un secondo argomento di tipo confrontabile con
String
(e Fixnum chiaramente non lo è). Per cui Ruby solleva ArgumentError perché
la stringa non può essere confrontata con il numero 10.