Sono nuovo ed ho un piccolo problema :) (ArgumentError)

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

Mi da sempre questo errore :
‘>’ : comparison of String with 10 failed

Inizio proprio bene…

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

On 1/24/07, Daniele V. [email protected] wrote:

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.

Zen and the Art of Ruby P.ming
http://effettofarfalla.com
Il battito d’ali di un italiano a Toronto

end

Mi da sempre questo errore :
‘>’ : comparison of String with 10 failed

number è un oggetto di classe String. Per confrontarlo con 10 fai
number.to_i > 10.

On 1/24/07, Francesco P. [email protected] wrote:

mentre “>” è un metodo della classe Fixnum…

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.

Ciao,
Antonio

Zen and the Art of Ruby P.ming
http://effettofarfalla.com
Il battito d’ali di un italiano a Toronto

Grazie, ora funziona :wink: