2013-02-15 14 views
16

Ich habe einen 'Fixnum in String (TypeError)' Fehler umgewandelt und obwohl es einfach genug erscheint, bin ich mir nicht sicher, wie ich es schaffen soll es. Ich dachte, meine Logik sei vernünftig - konvertiere die eingegebene String-Variable in eine ganze Zahl und führe dann die Grundoperation aus - aber anscheinend fehlt mir ein Schlüssel an Information.'+' kann Fixnum nicht in String umwandeln (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.'  

Haben Sie versucht Suche nach einer Antwort, aber Beispiele für die gleichen Fehler gibt weit über meine rudimentären Rubin Fähigkeiten gegenwärtig sind.

Antwort

48

Ruby (im Gegensatz zu einigen anderen Sprachen) wirft keine Objekte in Strings, wenn sie Operanden in String#+ Methode sind. Entweder manuell String Stimmen:

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

oder Verwendung String-Interpolation (man beachte die Anführungszeichen):

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

Also ist der Fehler in meinem Code in der Ausgabe der Variablen, nicht in der Manipulation von ihnen in den Zeilen oben? Habe ich Recht, wenn ich bedenke, dass Favenum ursprünglich als String gespeichert ist? Vielleicht ist das Tutorial, das ich befolge (http://pine.fm/LearnToProgram/?Chapter=04), nicht alles, was es ist, um ... zu sein? –

+0

@DanSolo: In der Tat, 'Favenum' ist in der Tat eine Zeichenfolge und sollte nicht den Fehler verursachen. Es ist Integer 'besser' Variable, die es verursacht. –

+0

Großartig, danke. Jetzt, wo du es erwähnst, kann ich logisch sehen, warum '+ better +' benutzt wird, wenn besser eine ganze Zahl ist, würde einen Fehler verursachen. Danke für die alternativen Möglichkeiten, um es zu umgehen. Meine Reise geht weiter ... –

5

Versuchen String-Interpolation verwendet wird, wie folgt aus:

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

Basierend auf dem Tutorial Sie folgen

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.' 

Erzeugt das "richtige" Ergebnis für Anfänger.

Verwandte Themen