Всегда ли нужно использовать "chomp" перед использованием `to_i` или` to_f`?

Я вижу, что люди используют следующий код:

gets.chomp.to_i

или

gets.chomp.to_f

Я не понимаю, почему, когда результат этих строк всегда совпадает с тем, что после gets нет chomp.

Действительно ли gets.chomp.to_i, или gets.to_i достаточно?

Ответ 1

Нет необходимости использовать метод chomp, потому что:

String#chomp возвращает новую строку с указанным разделителем записей, удаленным с конца строки (если присутствует). Если $/ не был изменен из разделителя записей Ruby по умолчанию, то chomp также удаляет символы возврата каретки (то есть он удаляет "\n", "\ r" и "\ r\n" ). Вот несколько примеров .

String#to_f возвращает результат интерпретации ведущих символов в str как число с плавающей запятой. Посторонние символы за конец допустимого числа игнорируются. Если в начале str нет допустимого числа, возвращается 0.0. Этот метод никогда не вызывает исключения. Вот несколько примеров для to_f.

Ответ 2

Я считаю, что он работает одинаково в любом случае, поэтому нет необходимости в chomp после gets, если вы собираетесь немедленно выполнить to_i или to_f.

На практике я никогда не видел ошибки, вызванной или отличающейся поведением, из-за отсутствия chomp из строки.

Я считаю, что это отвлекает, когда я вижу, что он используется в ответах, и в этом нет никакой необходимости. Он не добавляет "стиль", и он, как утверждает @TheTinMan, тратит впустую циклы процессора.

Ответ 3

Из документации для Строка # to_i:

Возвращает результат интерпретации ведущих символов в str как целое базовое основание (от 2 до 36). Посторонние символы конец действительного числа игнорируются. Если число действительных начинается начало str, 0

Строка # to_f ведет себя одинаково, исключая, конечно, базовые номера.

Посторонние символы за пределами допустимого числа игнорируются, это включает в себя новую строку. Поэтому нет необходимости использовать chomp.