我有以下代码:
gets().to_i
当我输入"A"
,"a"
,"world"
或其他内容并使用to_i
将其转换为整数时,我会返回0
。任何人都可以解释这里发生了什么,为什么我总是看到0
?
答案 0 :(得分:2)
那是因为转换为整数的字符串会返回0
,如果字符串以数字开头,则返回整数。
➜ ~ irb
2.1.5 :001 > "whatever".to_i
=> 0
2.1.5 :002 > "12-whatever".to_i
=> 12
2.1.5 :003 > "whatever-12".to_i
=> 0
当您尝试将A
,a
,world
转换为整数(没有意义)时,您将获得0
。
在尝试将输入转换为整数之前,应检查输入是否为整数。您可以使用正则表达式,也可以使用Integer
方法,如果输入不是整数,则会引发该方法。
2.1.5 :004 > Integer(12)
=> 12
2.1.5 :005 > Integer("world")
ArgumentError: invalid value for Integer(): "world"
from (irb):5:in `Integer'
from (irb):5
from /Users/weppos/.rvm/rubies/ruby-2.1.5/bin/irb:11:in `<main>'
2.1.5 :006 > Integer("12-world")
ArgumentError: invalid value for Integer(): "12-world"
from (irb):6:in `Integer'
from (irb):6
from /Users/weppos/.rvm/rubies/ruby-2.1.5/bin/irb:11:in `<main>'
答案 1 :(得分:1)
关于此的official documentation写得很好。
答案 2 :(得分:0)
实际上,你所描述的内容无法复制。在您提供的所有特定示例中,String#to_i
确实返回0
,但这并不意味着它会为任何字符串返回0
。首先,to_i
查看字符串的开头是否可以解释为整数。如果是,则返回该整数。如果没有,则返回0
。