字符串不能被强制转换为Fixnum(TypeError)

时间:2014-08-20 05:45:22

标签: ruby

我写了下面的基本代码

puts ' Hi there , what is your favorite number ? '
number = gets.chomp
puts number + ' is beautiful '
puts 1 + number.to_i + 'is way better'

但是当我运行它时,我得到错误“String不能被强制转换为Fixnum(TypeError)”。我该如何更正此错误?

4 个答案:

答案 0 :(得分:13)

您无法向数字添加字符串。您可以向String添加一个数字,因为它被强制转换为String:

'1' + 1
# => "11"
1 + 1
# => 2
1 + '1'
# TypeError!

由于我怀疑您希望显示为您的号码添加1的结果,因此您应明确cast it to string

puts (1 + number.to_i).to_s + ' is way better'

或,使用string interpolation

puts "#{1 + number.to_i} is way better"

答案 1 :(得分:1)

当您尝试将字符串添加到数字时,通常不会发生此错误不能将字符串强制转换为Integer 。因为您想在数字上加1并用字符串“更好”将其连接起来。您必须将将数字加1的结果显式转换为字符串,然后将其与字符串“更好”结合起来。

您可以将代码更新为此:

puts (1 + number.to_i).to_s + " " + 'is way better'

答案 2 :(得分:0)

您可能会找到输入' xyz'的结果。作为一个令人惊讶的输入。

discussion用于确定输入字符串是否为数字可能会有所帮助。

答案 3 :(得分:0)

假设数字是自然数:

number = gets.chomp
puts "#{number} is beautiful ", "#{number.succ} is way better"