2013-02-15 31 views
16

我碰到'不能将Fixnum转换为String(TypeError)'错误,虽然它似乎很简单,我不确定如何解决它。我认为我的逻辑是合理的 - 将输入的字符串变量转换为整数,然后执行基本操作 - 但显然我错过了一些关键信息。'+'不能将Fixnum转换为字符串(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! Think on." 
+0

所以我的代码中的错误是在变量的输出中,而不是在上面的行中对它们进行操作?我认为favenum最初是作为一个字符串存储的吗?也许我正在遵循的教程(http://pine.fm/LearnToProgram/?Chapter=04)并非全部被破解为......? – 2013-02-15 13:26:36

+0

@DanSolo:确实,'favenum'确实是一个字符串,不应该导致错误。它是导致它的整数“更好”变量。 – 2013-02-15 13:30:16

+0

太好了,谢谢。现在你提到它,我可以逻辑地看到为什么在更好的整数时使用'+ better +'会导致错误。感谢您解决它的其他选项。我的旅程继续... – 2013-02-15 13:37:55

5

试着用串插,像这样您正在关注

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

在初学者级别生成“正确”结果。

2

puts "Yeah #{favenum} is nice enough but #{better} is bigger and better by far!" 
相关问题