为什么Ruby中的String#to_i有时会在字符串包含数字时返回0?

17

我刚刚开始尝试使用Ruby,然后我发现了String#to_i方法。假设我有以下代码:

var1 = '6 sldasdhkjas'
var2 = 'aljdfldjlfjldsfjl 6'
为什么 puts var1.to_i 输出 6,而 puts var2.to_i 却输出 0
3个回答

32

to_i方法返回一个字符串开头所有可解析数字组成的数值。第一个字符串以数字开头,所以to_i返回该数字;第二个字符串未以数字开头,所以返回0。顺便说一句,空格会被忽略,因此" 123abc".to_i返回123。


1
这意味着如果字符串开头有非整数字符,to_i 将忽略字符串的其余部分吗? - hsinxh
1
如果字符串以非整数字符开头,则立即停止解析并返回0,忽略字符串中后面可能出现的数字。 - DarkDust
2
这并不完全正确-它将解析空格字符。" 123".to_i将评估为123,以及以制表符开头的字符串。 - Marc Talbot

9

String#to_i的文档中可以得知:

将字符串 str 的前导字符解释为整数并返回结果。


6

to_i 更详尽的例子:

irb(main):013:0* "a".to_i
=> 0
irb(main):014:0> "".to_i
=> 0
irb(main):015:0> nil.to_i
=> 0
irb(main):016:0> "2014".to_i
=> 2014
irb(main):017:0> "abc2014".to_i
=> 0
irb(main):018:0> "2014abc".to_i
=> 2014
irb(main):019:0> " 2014abc".to_i
=> 2014

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接