**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。
这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
6天前关闭。
这篇文章5天前被编辑并提交审查。
Improve this question
这是一个非常基本的问题,我知道,但我不知道为什么我得到这个错误。下面是代码:
puts "How old are you?"
age = gets.chomp.to_i
puts "In 10 years you will be:"
puts age + 10
puts "In 20 years you will be:"
puts age + 20
puts "In 30 years you will be:"
puts age + 30
puts "In 40 years you will be:"
puts age + 40
下面是我在irb中运行时的代码:
ex1.rb(main):005:0> puts "How old are you?"
How old are you?
=> nil
ex1.rb(main):006:0> age = gets.chomp.to_i
20
=> 20
ex1.rb(main):007:0> puts "In 10 years you will be:"
In 10 years you will be:
=> nil
ex1.rb(main):008:0> puts age + 10
30
=> nil
ex1.rb(main):009:0> puts "In 20 years you will be:"
In 20 years you will be:
=> nil
ex1.rb(main):010:0> puts age + 20
40
=> nil
ex1.rb(main):011:0> puts "In 30 years you will be:"
In 30 years you will be:
=> nil
ex1.rb(main):012:0> puts age + 30
50
=> nil
ex1.rb(main):013:0> puts "In 40 years you will be:"
In 40 years you will be:
=> nil
ex1.rb(main):014:0> puts age + 4060
=> nil
我不明白为什么我会得到最后一行代码。正如你所看到的,程序的其余部分运行正常,只是将两个整数相加,然而,最后一行代码似乎将两个整数相加,然后将乘积作为字符串加到数字40上。我试图搜索这个答案,但没有找到太多,这里会不会有其他错误?
我试过传递不同的整数,它总是显示40加上40。例如,如果我传递30,它将显示4070;如果我超过50,它将显示4090。如果我超过30,我将期望只得到70,或者如果我超过50,我将期望只得到90。
编辑:我想添加以下详细信息。上面的代码是文件中唯一的代码,我已经尝试将此代码复制并粘贴到一个新文件中,然后用IRB对新文件进行评级,以获得与上面相同的结果。如果有任何其他信息我可以提供,请让我知道。
EDIT 2:我已经尝试在replit中运行代码,并且得到了预期的结果。这显然让我相信当我通过irb运行代码时有什么错误,但我没有足够的经验知道它是什么。下面是当我运行xxd thiscode.rb时的终端输出:
00000000: 7075 7473 2022 486f 7720 6f6c 6420 6172 puts "How old ar
00000010: 6520 796f 753f 220a 6167 6520 3d20 6765 e you?".age = ge
00000020: 7473 2e63 686f 6d70 2e74 6f5f 690a 7075 ts.chomp.to_i.pu
00000030: 7473 2022 496e 2031 3020 7965 6172 7320 ts "In 10 years
00000040: 796f 7520 7769 6c6c 2062 653a 220a 7075 you will be:".pu
00000050: 7473 2061 6765 202b 2020 3130 0a70 7574 ts age + 10.put
00000060: 7320 2249 6e20 3230 2079 6561 7273 2079 s "In 20 years y
00000070: 6f75 2077 696c 6c20 6265 3a22 0a70 7574 ou will be:".put
00000080: 7320 6167 6520 2b20 2032 300a 7075 7473 s age + 20.puts
00000090: 2022 496e 2033 3020 7965 6172 7320 796f "In 30 years yo
000000a0: 7520 7769 6c6c 2062 653a 220a 7075 7473 u will be:".puts
000000b0: 2061 6765 202b 2020 3330 0a70 7574 7320 age + 30.puts
000000c0: 2249 6e20 3430 2079 6561 7273 2079 6f75 "In 40 years you
000000d0: 2077 696c 6c20 6265 3a22 0a70 7574 7320 will be:".puts
000000e0: 6167 6520 2b20 2034 30 age + 40
1条答案
按热度按时间qmelpv7a1#
最好的办法是显式地进行转换,如果无法成功转换值,则引发异常。例如:
这种方法的好处是,如果#future_age的任何一个参数不能被强制为Integer,就会引发一个异常。这至少会给你指出bug的来源,或者给予你正确的答案。无论哪种方式,它都会解决你的问题。