Всегда ли нужно использовать "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
.