Мы недавно решили на моей работе гид по рубиновому стилю. Одним из указов является то, что ни одна строка не должна быть шире, чем 80 символов. Поскольку это проект Rails, у нас часто бывают строки, которые немного длиннее - то есть « Пользователь X хотел отправить вам сообщение о Thing Y », которое не всегда укладывается в ограничение в 80 символов.
Я понимаю, что есть три способа иметь длинную строку, охватывающую несколько строк:
- Heredoc
- % Q {}
- Фактическая конкатенация строк.
Тем не менее, все эти случаи в конечном итоге занимают больше вычислительных циклов, что кажется глупым. Конкатенация строк, очевидно, но для HEREDOC
и %Q
я должен вырезать новые строки, через что-то вроде .gsub(/\n$/, '')
.
Есть ли чистый синтаксический способ сделать это, что эквивалентно наличию всей строки в одной строке? Цель, очевидно, состоит в том, чтобы не тратить лишних циклов только потому, что я хочу, чтобы мой код был немного более читабельным. (Да, я понимаю, что вы должны сделать этот компромисс много ... но для длины строки это просто кажется глупым.)
Обновление: обратная косая черта не совсем то, что я хочу, потому что вы теряете отступы, что действительно влияет на стиль / читабельность.
Пример:
if foo
string = "this is a \
string that spans lines"
end
Я нахожу вышеупомянутое немного трудным для чтения.
РЕДАКТИРОВАТЬ : я добавил ответ ниже; три года спустя у нас теперь волнистый наследственный синдром.
источник
\n
символы новой строки или нет. Верхний ответ не сохраняет их, а ваш ответ сохраняет. Вопрос гласит: «Без удаления новых строк», но в описании говорится: «[...] Я должен удалить новые строки».Ответы:
Может быть, это то, что вы ищете?
источник
Вы можете использовать,
\
чтобы указать, что любая строка Ruby продолжается на следующей строке. Это работает и со строками:будет выводить
"this is a string that spans lines"
источник
Три года спустя, в Ruby 2.3 теперь есть решение: волнистый наследник.
Ссылка на запись в блоге: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heroc
источник
<<~HEREDOC
сохраняет символы новой строки, это только лишние отступы. Напримерline 1\nline 2\nline 3\n
У меня была эта проблема, когда я пытаюсь написать очень длинный URL, работает следующее.
Обратите внимание, что при формировании строки URL не должно быть никаких новых строк, пробелов. Если вы хотите переводы строк, используйте HEREDOC.
Здесь у вас есть отступ для удобства чтения, простоты модификации, без лишних кавычек и обратной косой черты в каждой строке. Стоимость соединения строк должна быть незначительной.
источник
Я изменил ответ Зака, так как хотел пробелы и интерполяцию, но не переводы строк, и использовал:
где
name = 'fred'
это производитIt's a nice day "fred" for a walk!
источник