在Ruby中,为什么我需要将整数转换为字符串来打印它?

时间:2014-02-10 21:52:02

标签: ruby

帮助我理解为什么这不起作用:

puts 'What\'s your favorite number?'
number = gets.chomp
newnumber = number.to_i + 5
puts 'I think you really mean ' + newnumber + ' right?'

为什么会这样做:

puts 'What\'s your favorite number?'
number = gets.chomp
newnumber = number.to_i + 5
puts 'I think you really mean ' + newnumber.to_s + ' right?'

我不明白为什么我必须转换" newnumber"整数成一个字符串。它不应该只是自动打印成一个字符串吗?

另外......如果有效

puts 'What\'s your favorite number?'
number = gets.chomp
puts number.to_i + 5

为什么我不能这样做?

puts 'What\'s your favorite number?'
number = gets.chomp
puts 'I think you really mean ' + number.to_i + 5 + ' right?'

3 个答案:

答案 0 :(得分:2)

printputs不要求您将数字转换为字符串。在这种情况下,问题是您正在尝试向字符串添加数字。这个表达式:

'I think you really mean ' + newnumber + ' right?'
必须在puts收到其参数之前评估

。您无法在字符串中添加数字,原因在于您尝试时会出现错误:

TypeError: no implicit conversion of Fixnum into String

你可以这样做:

puts newnumber

如果要在输出时获得隐式类型转换,请使用插值:

puts "I think you really mean #{newnumber} right?"

Ruby会自动在to_s上调用newnumber

请注意,您必须在字符串周围使用"双引号",因为插值不会出现在单引号字符串中。

答案 1 :(得分:0)

我不确定,但认为concat中的问题。当你尝试这样做时:

number.to_i + 5

Ruby只计算2个整数的总和并打印出来。

当你尝试:

'我认为你的意思是'+ number.to_i + 5 +'对吗?

你强制ruby解释器计算字符串和整数的SUM,而ruby不知道如何计算它。

当你尝试做的时候:

'我认为你的意思是'+ newnumber.to_s +'对吧?'

ERB只是连接这个字符串。

是的,抱歉我的英语不好。 :)

答案 2 :(得分:0)

puts可以接受整数或字符串参数,甚至可以同时接受两者:

puts "hello number ", 4
# hello number
# 4

+及其各种重载可以接受字符串+字符串(串联)或数字+数字(加法),但ruby没有接受字符串+数字的重载版本。是的,许多其他语言(如JavaScript等),但ruby选择不这样做。

这应该解决你问题中的每一个案例;如果没有,请告诉我是否可以澄清一些事情。