我剛剛嘗試Ruby,我碰到了String#to_i
。假設我有這樣的代碼:爲什麼Ruby的String#to_i有時在字符串中包含數字時返回0?
var1 = '6 sldasdhkjas'
var2 = 'aljdfldjlfjldsfjl 6'
爲什麼puts var1.to_i
輸出6
時puts var2.to_i
給0
?
我剛剛嘗試Ruby,我碰到了String#to_i
。假設我有這樣的代碼:爲什麼Ruby的String#to_i有時在字符串中包含數字時返回0?
var1 = '6 sldasdhkjas'
var2 = 'aljdfldjlfjldsfjl 6'
爲什麼puts var1.to_i
輸出6
時puts var2.to_i
給0
?
to_i
方法返回由字符串的起始處的所有可解析數字組成的數字。你的第一個字符串以數字開始,所以to_i
返回那個,第二個字符串不以數字開頭,所以返回0。 BTW,空白將被忽略,所以" 123abc".to_i
返回123
的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
這樣就意味着如果在開頭有非整數字符字符串to_i會忽略字符串的其餘部分? – hsinxh 2012-01-07 10:11:08
準確地說,如果字符串以非整數字符開始,它會立即停止解析並返回0,忽略可能在字符串後面出現的任何數字。 – DarkDust 2012-01-07 12:44:12
這不完全正確 - 它將通過空白字符進行解析。 「123」.to_i將評估爲123,就像一個以製表符開頭的字符串一樣。 – 2012-01-07 16:54:19