2013-02-15 2 views
16

Я ударил по ошибке «не могу преобразовать Fixnum в String (TypeError)», и пока он кажется достаточно простым, я не уверен, как обойти Это. Я думал, что моя логика звучит - преобразовать введенную строковую переменную в целое число, а затем выполнить основную операцию, но, видимо, мне не хватает некоторого ключевого бита информации.'+' не может преобразовать Fixnum в 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.'  

Пытался искать ответ, но примеры те же ошибки там находятся далеко за пределами моих зачаточных навыков рубина в настоящее время.

ответ

48

Ruby (в отличие от некоторых других языков) не бросает объекты в строки, когда они являются операндами в методе String#+. Либо бросить в строку вручную:

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

или использование строки интерполяции (обратите внимание на двойные кавычки):

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

Таким образом, ошибка в моем коде находится в выводе переменных, а не в их манипулировании в строках выше? Правильно ли я думаю, что favenum первоначально хранится как строка? Может быть, учебник, которым я следую (http://pine.fm/LearnToProgram/?Chapter=04), не все, что он взломал, чтобы быть ...? –

+0

@ DanSolo: Действительно, 'favenum' действительно является строкой и не должен вызывать ошибку. Это целая переменная 'better', которая вызывает ее. –

+0

Отлично, спасибо. Теперь вы упомянули, что я могу логически понять, почему использование «+ лучше +», когда лучше целое число, приведет к ошибке. Спасибо за альтернативные варианты в том, чтобы обойти это. Мое путешествие продолжается ... –

5

Попробуйте использовать интерполяцию строки, например:

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

на основе учебника Вы следуете за:

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

Производит «правильный» результат на уровне новичка.

Смежные вопросы