Почему Ruby String # to_i иногда возвращает 0, если строка содержит число? - PullRequest
14 голосов
/ 07 января 2012

Я просто пробовал Руби и наткнулся на String#to_i. Предположим, у меня есть этот код:

var1 = '6 sldasdhkjas'
var2 = 'aljdfldjlfjldsfjl 6'

Почему puts var1.to_i выводит 6, когда puts var2.to_i дает 0?

Ответы [ 3 ]

29 голосов
/ 07 января 2012

Метод to_i возвращает число, образованное всеми разбираемыми цифрами в начале строки. Ваша первая строка начинается с цифры, поэтому to_i возвращает это значение, вторая строка не начинается с цифры, поэтому возвращается 0. Кстати, пробелы игнорируются, поэтому " 123abc".to_i возвращает 123.

8 голосов
/ 07 января 2012

Из документации на String#to_i:

Возвращает результат интерпретации начальных символов в str как целое число

5 голосов
/ 28 марта 2014

Более исчерпывающие примеры 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
...