Niedawno w mojej pracy zdecydowaliśmy się na przewodnik w stylu ruby. Jednym z edyktów jest to, że żaden wiersz nie powinien być szerszy niż 80 znaków. Ponieważ jest to projekt Railsowy, często mamy łańcuchy, które są nieco dłuższe - tzn. „ Użytkownik X chciał wysłać Ci wiadomość o Rzecz Y ”, która nie zawsze mieści się w limicie 80 znaków.
Rozumiem, że istnieją trzy sposoby, aby długi ciąg obejmował wiele linii:
- HEREDOC
- % Q {}
- Rzeczywista konkatenacja łańcucha.
Jednak wszystkie te przypadki wymagają więcej cykli obliczeniowych, co wydaje się głupie. Oczywiście łączenie łańcuchów, ale dla HEREDOC
i %Q
muszę usunąć nowe linie za pomocą czegoś takiego .gsub(/\n$/, '')
.
Czy jest na to czysty sposób składni, który jest równoważny po prostu umieszczeniu całego łańcucha w jednym wierszu? Celem jest oczywiście, aby nie spędzać żadnych dodatkowych cykli tylko dlatego, że chcę, aby mój kod był nieco bardziej czytelny. (Tak, zdaję sobie sprawę z tego, że trzeba to zrobić dużo ... ale jeśli chodzi o długość struny, to po prostu wydaje się głupie.)
Aktualizacja: Odwrotne ukośniki nie są dokładnie tym, czego chcę, ponieważ tracisz wcięcia, co naprawdę wpływa na styl / czytelność.
Przykład:
if foo
string = "this is a \
string that spans lines"
end
Uważam, że powyższe jest trochę trudne do odczytania.
EDYCJA : poniżej dodałem odpowiedź; trzy lata później mamy teraz zawiłego heredoka.
źródło
\n
znaki nowej linii, czy nie. Najlepsza odpowiedź ich nie zachowuje, a jednak twoja odpowiedź tak. Pytanie brzmi „bez usuwania nowych linii” - ale opis mówi „[...] Muszę usunąć nowe linie”.Odpowiedzi:
Może tego właśnie szukasz?
źródło
Możesz użyć,
\
aby wskazać, że dowolny wiersz Ruby kontynuuje w następnym wierszu. Działa to również z ciągami:wyjdzie
"this is a string that spans lines"
źródło
Trzy lata później jest teraz rozwiązanie w Ruby 2.3: Squiggly heredoc.
Link do posta na blogu: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc
źródło
<<~HEREDOC
zachowuje znaki nowego wiersza, usuwa tylko wcięcia. Np.line 1\nline 2\nline 3\n
Miałem ten problem, kiedy próbowałem napisać bardzo długi adres URL, następujące prace.
Uwaga: podczas tworzenia ciągu adresu URL nie może być żadnych nowych linii, białych znaków. Jeśli chcesz nowego wiersza, skorzystaj z HEREDOC.
Tutaj masz wcięcie dla czytelności, łatwości modyfikacji, bez zbędnych cytatów i ukośników w każdej linii. Koszt połączenia ciągów powinien być znikomy.
źródło
Zmodyfikowałem odpowiedź Zacka, ponieważ chciałem spacji i interpolacji, ale nie nowych linii i użyłem:
gdzie
name = 'fred'
to produkujeIt's a nice day "fred" for a walk!
źródło