2013-02-15 18 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

私のコードのエラーは変数の出力にありますが、上の行のそれらの操作ではありません。ファヴァンはもともと文字列として保存されていると思うのですか?たぶん、私が従っているチュートリアル(http://pine.fm/LearnToProgram/?Chapter=04)は、それがすべてになってしまうわけではありません...? –

+0

@ Dansoolo:確かに、 'favenum'は実際には文字列であり、エラーを引き起こすべきではありません。それはそれを引き起こす整数の 'より良い'変数です。 –

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

初心者レベルで「正しい」結果を生成します。

関連する問題