새 줄을 제거하지 않고 Ruby에서 여러 줄의 긴 문자열 분할
우리는 최근에 제 직장에서 루비 스타일 가이드를 하기로 결정했습니다.그 중 하나는 어떤 줄도 80자를 넘어서는 안 된다는 것입니다.이것은 Rails 프로젝트이기 때문에 "X 사용자가 Y에 대한 메시지를 보내고 싶어함"과 같이 항상 80자 스타일 제한에 맞지 않는 약간 긴 문자열이 있는 경우가 많습니다.
긴 문자열이 여러 줄에 걸쳐 있는 세 가지 방법이 있다는 것을 알고 있습니다.
- 헤레독
- %Q{}
- 실제 문자열 연결입니다.
그러나 이러한 모든 경우는 더 많은 계산 주기를 소요하게 되는데, 이는 어리석은 것으로 보입니다.문자열 연결은 분명하지만, 다음을 위해.HEREDOC
그리고.%Q
저는 새로운 라인을 제거해야 합니다, 비슷한 것을 통해..gsub(/\n$/, '')
.
한 줄에 전체 문자열을 포함하는 것과 같은 순수한 구문 방법이 있습니까?목표는 분명히 제 코드가 조금 더 읽기 쉽기를 원하기 때문에 추가 사이클을 사용하지 않는 것입니다.(네, 저는 당신이 그 대가를 많이 치러야 한다는 것을 알고 있습니다.하지만 문자열 길이의 경우, 이것은 그저 우스꽝스럽게 보입니다.)
업데이트: 스타일/가독성에 영향을 미치는 들여쓰기가 손실되기 때문에 백슬래시는 제가 원하는 것이 아닙니다.
예:
if foo
string = "this is a \
string that spans lines"
end
저는 위의 것들을 읽기가 좀 어렵다고 생각합니다.
편집: 아래에 답변을 추가했습니다. 3년 후에 우리는 이제 꼬불꼬불한 의사를 갖게 되었습니다.
이게 당신이 찾고 있는 것일 수도 있어요?
string = "line #1"\
"line #2"\
"line #3"
p string # => "line #1line #2line #3"
사용할 수 있습니다.\
Ruby의 모든 행이 다음 행에서 계속됨을 나타냅니다.이것은 문자열에서도 작동합니다.
string = "this is a \
string that spans lines"
puts string.inspect
will 출력"this is a string that spans lines"
3년이 지난 지금, 루비 2.3에 해결책이 있습니다: 꼬불꼬불한 이레독.
class Subscription
def warning_message
<<~HEREDOC
Subscription expiring soon!
Your free trial will expire in #{days_until_expiration} days.
Please update your billing information.
HEREDOC
end
end
블로그 게시물 링크: https://infinum.co/the-capsized-eight/articles/multiline-strings-ruby-2-3-0-the-squiggly-heredoc
내용의 각 줄에서 들여쓰기가 가장 적게 된 줄의 들여쓰기가 제거됩니다.
매우 긴 url을 작성하려고 할 때 다음과 같은 문제가 발생했습니다.
image_url = %w(
http://minio.127.0.0.1.xip.io:9000/
bucket29/docs/b7cfab0e-0119-452c-b262-1b78e3fccf38/
28ed3774-b234-4de2-9a11-7d657707f79c?
X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=ABABABABABABABABA
%2Fus-east-1%2Fs3%2Faws4_request&
X-Amz-Date=20170702T000940Z&
X-Amz-Expires=3600&X-Amz-SignedHeaders=host&
X-Amz-Signature=ABABABABABABABABABABAB
ABABABABABABABABABABABABABABABABABABA
).join
URL 문자열이 형성될 때 새 줄, 공백이 없어야 합니다.새 줄을 원하는 경우 HEREDOC를 사용합니다.
여기에는 각 줄에 알기 쉬운 따옴표와 백슬래시 없이 읽기 쉽고 수정하기 쉬운 들여쓰기가 있습니다.현에 가입하는 데 드는 비용은 무시해도 될 정도입니다.
이것은 지금까지 매우 오래된 질문이지만 여전히 문제가 제기되는 것처럼 보이므로 업데이트된 답변이 있습니다.원래 포스터에는 레일즈 프로젝트용으로 표시되어 있으므로 레일즈의 String 굴절을 확인하여 도움을 받을 수 있습니다.
my_long_string = <<-STRING
hello
there
multiline
multiindented string
STRING
=> " hello\n there\n multiline\n multiindented string\n"
을 합니다.squish
방법.
my_long_string = <<-STRING.squish
so
long
multiline
multiindented string
STRING
=> "so long multiline multiindented string"
문서에 따르면 -
squish()
문자열을 반환합니다. 먼저 문자열의 양쪽 끝에 있는 모든 공백을 제거한 다음 나머지 연속 공백 그룹을 각각 하나의 공백으로 변경합니다.
저는 공백과 보간을 원하지만 새 줄은 원하지 않기 때문에 잭의 답변을 수정했고 다음을 사용했습니다.
%W[
It's a nice day "#{name}"
for a walk!
].join(' ')
name = 'fred'
은 이이생는하산을 만듭니다.It's a nice day "fred" for a walk!
레일즈의 스퀴시는 당신이 필요로 하는 일을 하고 있습니다.
https://apidock.com/rails/String/squish
끝은 다음과 같습니다.
%{ Multi-line
string }.squish
Ruby에서 필요하기 때문에 Rails 코드를 보십시오.
%{ Multi-line
string }
.gsub!(/[[:space:]]+/, " ")
.strip!
여러 줄로 분할된 여러 문자열을 연결할 수 있습니다.
if foo
string = "this is a" +
"string that spans lines"
end
언급URL : https://stackoverflow.com/questions/10522414/breaking-up-long-strings-on-multiple-lines-in-ruby-without-stripping-newlines
'programing' 카테고리의 다른 글
응용 프로그램이 메인 스레드에서 너무 많은 작업을 수행하고 있을 수 있습니다. (0) | 2023.06.04 |
---|---|
오류 해결 방법 "'운영' 환경에 대한 'secret_key_base' 누락"(레일 4.1) (0) | 2023.06.04 |
찾기를 사용하여 정규식으로 파일 이름을 검색하는 방법 (0) | 2023.06.04 |
postgresql 날짜 시간에 일 수를 추가하는 방법 (0) | 2023.06.04 |
배치 파일을 윈도우즈 서비스로 실행 (0) | 2023.06.04 |