От fine manual:
грызть (разделитель = $ /) → new_str
Возвращает новый String
с данным разделителем записей, удаленным с конца str (если имеется). Если $/
не был изменен из разделителя записей Ruby по умолчанию, то chomp
также удаляет символы возврата каретки (то есть он удаляет \n
, \r
и \r\n
).
и chomp!
:
грызть (разделитель = $ /) → ул или ноль
Модифицирует ул на месте, как описано для String#chomp
, возвратившись ул, или nil
, если никаких изменений не было сделано.
Поэтому ни chomp
, ни chomp!
делать то, что вы думаете. Обратите внимание:
>> s = '100 '
=> "100 "
>> s.chomp
=> "100 "
>> s
=> "100 "
>> s.chomp!
=> nil
>> s
=> "100 "
Так что ни одна заботится о завершающие пробелы, если вы не говорите им, что они просто сдирать задней EOLS по умолчанию.
'100 '.chomp!
возвращает nil
, потому что об этом говорит документация. Никакой замены не было сделано, поэтому он возвращает nil
.
Почему nil.to_i
дает вам нуль?Ну, из fine manual:
to_i → 0
Всегда возвращает нулевое значение.
Это не оставляет много места для двусмысленности или толкования.
Я думаю, что вы на самом деле после strip
семейства методов, а не chomp
:
Удалить удаленные пробелы из строки.
1) Ваш пример неправильный. 2) Вы должны отделить свои два вопроса. – sawa