Почему в рубрике 'gets' есть закрывающий символ новой строки? - PullRequest
18 голосов
/ 22 июня 2011

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

Почему это там?

Ответы [ 4 ]

7 голосов
/ 22 июня 2011

Как и puts (звучит похоже), он предназначен для работы со строками, используя символ \n.

gets принимает необязательный аргумент, который используется для "разделения" ввода(или «просто чтение до прибытия»). По умолчанию используется специальная глобальная переменная $/, которая по умолчанию содержит \n.

gets - довольно общий метод для чтения потоков и включаетразделитель. Если этого не произойдет, части содержимого потока будут потеряны.

5 голосов
/ 07 января 2013
var = gets.chomp 

Это помещает все это в одну строку для вас.

2 голосов
/ 22 июня 2011

Если вы посмотрите документацию IO#gets, вы заметите, что метод принимает необязательный параметр sep, который по умолчанию равен $/ (разделитель входных записей).Вы можете решить разделить ввод на другие элементы, кроме новых строк, например, абзацев («разделитель нулевой длины читает ввод абзаца за раз (два последовательных перевода строки в отдельных абзацах ввода)»):

>> gets('')
dsfasdf
fasfds


dsafadsf    #=> "dsfasdf\nfasfds\n\n"
0 голосов
/ 22 июня 2011

С точки зрения производительности, лучшим вопросом будет «зачем мне от него избавляться?». Это не большая стоимость, но под капотом вы должны заплатить, чтобы сжать возвращаемую строку. Хотя у вас, возможно, никогда не было случая, когда вам нужно , у вас наверняка было много случаев, когда вам все равно - gets s; puts stuff() if s =~ /y/i и т. Д. (крошечное, крошечное) улучшение производительности за счет отсутствия шума.

...