【发布时间】:2015-12-06 11:31:56
【问题描述】:
我有以下代码:
gets().to_i
当我输入"A"、"a"、"world" 或任何内容并使用to_i 将其转换为整数时,我会返回0。谁能解释这里发生了什么以及为什么我总是看到0?
【问题讨论】:
-
我想你会在这里找到答案:stackoverflow.com/questions/8768865/…
标签: ruby
我有以下代码:
gets().to_i
当我输入"A"、"a"、"world" 或任何内容并使用to_i 将其转换为整数时,我会返回0。谁能解释这里发生了什么以及为什么我总是看到0?
【问题讨论】:
标签: ruby
这是因为转换为整数的字符串返回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>'
【讨论】:
上面的official documentation写得很好。
【讨论】:
实际上,您描述的内容无法复制。在您给出的所有特定示例中,String#to_i 确实返回0,但这并不意味着它为任何字符串返回0。首先,to_i 查看字符串的开头是否可以解释为整数。如果是,则返回该整数。如果不是,则返回0。
【讨论】: