Почему Ruby "получает" включает закрытие новой строки?
Мне не нужна конечная новая строка, которую я получаю от gets. Половину времени я забываю chomp, и это боль в....
Почему он там?
Ответ 1
Подобно puts (который похож на него), он предназначен для работы с строками с использованием символа \n.
gets принимает необязательный аргумент, который используется для "разделения" ввода (или "только чтение до его поступления" ). По умолчанию используется специальная глобальная переменная $/, которая по умолчанию содержит \n.
gets - довольно общий метод для потоков чтения и включает этот разделитель. Если он этого не сделает, части содержимого потока будут потеряны.
Ответ 2
var = gets.chomp
Это помещает все в одну строку для вас.
Ответ 3
Если вы посмотрите документацию IO#gets, вы заметите, что метод принимает необязательный параметр sep, который по умолчанию имеет значение $/ (разделитель входных данных). Вы можете разрешить разделение ввода на другие вещи, кроме строк новой строки, например. абзацы ( "разделитель нулевой длины читает ввод абзаца за раз (две последовательные строки новой строки во входных отдельных абзацах)" ):
С точки зрения производительности лучшим вопросом будет "почему я должен избавиться от него?". Это не большая стоимость, но под капотом вам приходится платить за то, что возвращается строка. В то время как у вас, возможно, никогда не было случая, когда вам это нужно, у вас наверняка было много случаев, когда вам было все равно - gets s; puts stuff() if s =~ /y/i и т.д. В этих случаях вы увидите (крошечную, крошечную) производительность улучшение, а не прерывание.