2013-02-15 15 views
16

Ho riscontrato un errore "impossibile convertire Fixnum in String (TypeError)" e mentre sembra abbastanza semplice non sono sicuro su come spostarmi esso. Ho pensato che la mia logica fosse valida: converti la variabile di stringa immessa in un numero intero e poi esegui l'operazione di base, ma a quanto pare mi mancano alcune informazioni chiave.'+' non può convertire Fixnum in String (TypeError)

puts 'What is your favourite number?' 
favenum = gets.chomp 
better = favenum.to_i + 1 
puts 'Yeah '+favenum+' is nice enough but '+better+' is bigger and better by far! Think on.'  

hanno provato alla ricerca di una risposta, ma esempi dello stesso errore fuori ci sono ben oltre le mie capacità rubino rudimentali attualmente.

risposta

48

Ruby (a differenza di altri linguaggi) non esegue il cast degli oggetti sulle stringhe quando sono operandi nel metodo String#+. In entrambi espressi a stringa manualmente:

puts 'Yeah ' + favenum.to_s + ' is nice enough but ' + better.to_s + ' is bigger and better by far!' 

o interpolazione uso stringa (notare le virgolette):

puts "Yeah #{favenum} is nice enough but #{better} is bigger and better by far!" 
+0

Quindi l'errore nel mio codice è nell'output delle variabili, non nella loro manipolazione nelle righe sopra? Sono corretto nel pensare che il favenum sia originariamente memorizzato come una stringa? Forse il tutorial che sto seguendo (http://pine.fm/LearnToProgram/?Chapter=04) non è tutto ciò che è rotto per essere ...? –

+0

@DanSolo: Infatti, 'favenum' è effettivamente una stringa e non dovrebbe causare l'errore. È la variabile intero 'migliore' che la causa. –

+0

Grande, grazie. Ora tu me ne parli, posso vedere logicamente perché usare '+ better +' quando meglio è un intero causerebbe un errore. Grazie per le opzioni alternative per aggirarlo. Il mio viaggio continua ... –

5

Prova con interpolazione di stringhe, come questo:

puts "Yeah #{favenum} is nice enough but #{better} is bigger and better by far! Think on." 
2

Sulla base del tutorial stai seguendo

puts 'Please enter your favourite number: ' 
number = gets.chomp 
imp = number.to_i + 1 
puts 'I\'d say '.to_s + imp.to_s + ' is a much better number.' 

Produce il risultato "corretto" a livello di principiante.

Problemi correlati