Подтвердить что ты не робот

Почему Ruby "получает" включает закрытие новой строки?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

var = gets.chomp 

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

Ответ 3

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

>> gets('')
dsfasdf
fasfds


dsafadsf    #=> "dsfasdf\nfasfds\n\n"

Ответ 4

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