帮助我理解为什么这不起作用:
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?'
答案 0 :(得分:2)
print
和puts
不要求您将数字转换为字符串。在这种情况下,问题是您正在尝试向字符串添加数字。这个表达式:
'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选择不这样做。
这应该解决你问题中的每一个案例;如果没有,请告诉我是否可以澄清一些事情。