2013-12-15 2 views
10

я вижу людей используют следующий код:Всегда ли нужно использовать «chomp» перед использованием `to_i` или` to_f`?

gets.chomp.to_i 

или

gets.chomp.to_f 

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

Действительно ли необходимо gets.chomp.to_i или gets.to_i?

+4

Я мог бы отредактировать этот вопрос, чтобы спросить: «Всегда нужно использовать' .chomp' перед вызовом '.to_i'. – vgoff

+3

Ни один из (четырех) ответов на данный момент не касается вопроса. Vgoff хочет знать, почему 'chomp' часто используется, когда он не нужен. Также см. его комментарий. Я подозреваю, что это та же самая причина, по которой часто видят' self.map ... ', когда' map ...'было бы достаточно: стиль или невежество. –

+1

+1 @CarySwoveland: Совершенно верно. Я думаю, люди делают это, потому что они не перестают думать о том, что они делают. Быстрый тест в IRB подтвердил бы, что 'chomp' был потрачен впустую процессорного времени. –

ответ

1

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

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

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

+0

Я буду редактировать позже. – SergeyKutsko

+1

Это ответ? :) –

+0

Я был прерван при создании ответа. – SergeyKutsko

2

Это мое мнение, что он работает так же, так или иначе, так что нет никакой необходимости в chomp после gets если вы собираетесь сразу сделать to_i или to_f.

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

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

+2

'chomp' является посторонним и ничего не добавляет к вычислению. Мы должны знать о нашем типе данных, который приходит. Если для использования 'to_i' требуется проверка правильности, тогда он будет улавливать нецелые значения, которые' chomp' не будут делать вообще, поэтому его место в код не имеет практического значения. –

2

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

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

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

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

Смежные вопросы