여기 문서가 있습니다
heredocs
를 메서드의 인수로 사용하는 방법에 대해 배웠습니다.시작하자 ...
Heredoc이란 무엇입니까?
설명서는 다음과 같이 말합니다.
A here document or heredoc can be useful for writing strings spanning over multiple lines.
그리고 그것들이 어떻게 정의되는지 계속 설명합니다:
A heredoc is denoted by
<<-
followed by a heredoc identifier [...]. The heredoc starts in the following line and ends with the next line that contains only the heredoc identifier.
heredocs를 사용하는 방법?
다음은
heredoc
를 정의하는 방법에 대한 예입니다.<<-HERE_BE_DOC
Hello World
Beware, here be dragons!
HERE_BE_DOC
A
heredoc
(다른 String
와 마찬가지로)를 변수에 할당할 수 있습니다.dragons = <<-HERE_BE_DOC
Hello World
Beware, here be dragons!
HERE_BE_DOC
puts dragons
이 예는 다음을 출력합니다.
Hello World
Beware, here be dragons!
물론 메소드의 인수로 사용할 수 있습니다.
def string_length(str : String)
str.size
end
puts string_length <<-HERE_BE_DOC
Hello World
Beware, here be dragons!
HERE_BE_DOC
이 예는 다음을 출력합니다.
42
참고: 원래 줄 바꿈과 공백을 유지합니다! 🤩
Heredoc 및 방법
따라서 a
heredoc
가 a String
를 정의하는 방법이라면 a heredoc
는 모든 String
메서드에 응답합니다(문자열이기 때문에). 마지막 예는 #size
방법을 사용할 때 정확히 이것을 보여줍니다.따라서 다음 예를 시도해 보겠습니다.
"Hello World".size # => 11
그러나
heredoc
를 사용하여:puts <<-WORLD
Hello World
WORLD.size
Error: Unterminated heredoc: can't find "WORLD" anywhere before the end of file
오!
heredoc
의 끝을 찾을 수 없습니다(컴파일러가 WORLD.size
를 전체 단어로 "읽고 있음"을 의미) 🤔 ... 잠깐만요 🤓💡 다음과 같이 수정해 보겠습니다.<<-WORLD
Hello World
WORLD
.size # => 11
그것은 효과가 있었습니다 🤓🎉 하지만 이 솔루션은 해킹처럼 느껴집니다. 예제를 작성하는 올바른(직관적이지는 않지만) 방법을 찾기 위해 문서로 이동해 보겠습니다.
After the heredoc identifier, and in that same line, anything that follows continues the original expression that came before the heredoc. It's as if the end of the starting heredoc identifier is the end of the string.
따라서 다음이 작동해야 합니다.
<<-WORLD.size # => 11
Hello World
WORLD
엄청난! 작동하고 있습니다!
(나중에 도움이 될 수 있으므로 고정해야 합니다. 📌)
여러 heredocs 사용
이 게시물의 시작 부분에서 말했듯이 tests 방법을 사용하여 일부
assert_format
를 작성했습니다. 이 메서드의 처음 두 인수에 초점을 맞추겠습니다. 첫 번째 인수는 포맷터에 대한 입력이고 두 번째 인수는 입력을 포맷한 후 예상되는 결과입니다.우리는 소스 코드를 형식화하고 있기 때문에
heredoc
를 사용하는 것이 정말 편리할 것입니다(들여쓰기와 개행을 사용하여 코드를 읽기 쉽게 형식화할 수 있기 때문입니다). 단 하나의 세부 사항: 내가 사용하려고 했던 잘못된 방법 🙈나는 썼다 :
assert_format <<-BEFORE
alias Foo=
Bar
BEFORE,
<<-AFTER
alias Foo = Bar
AFTER
컴파일러는 다음을 반환했습니다.
Error: Unterminated heredoc: can't find "BEFORE" anywhere before the end of file
익숙한 것 같죠?
WORLD.size
예를 기억하십니까? 음, 여기서 BEFORE,
와 같은 문제가 있습니다.그리고 솔루션은 문서에 설명된 것과 동일합니다. 다음과 같이 두 가지
heredocs
를 메서드에 전달해야 합니다.assert_format <<-BEFORE, <<-AFTER
alias Foo=
Bar
BEFORE
alias Foo = Bar
AFTER
작동하고 있습니다! 🎉
문제의 핵심은 첫 줄
assert_format <<-BEFORE, <<-AFTER
에 있었다. 다음 문서를 기억하십시오.It's as if the end of the starting heredoc identifier is the end of the string.
Heredoc 대 문자열
마지막으로
strings
대신 heredocs
를 사용한 동일한 예가 있습니다.assert_format " alias Foo=\n Bar", " alias Foo = Bar"
많은 것을 얻지 못한 것처럼 보이지만 여기에는 여러 개의
newlines
및 들여쓰기가 있는 더 복잡한 example이 있습니다.작별 인사하고 나중에 보자
Heredoc에 대해, Heredoc의 메서드를 사용하는 방법과 메서드에 대한 인수로 다중
heredocs
을 사용하는 방법을 배웠습니다.이 게시물을 작성하는 동안 위의 모든 드래곤은 피해를 입지 않았습니다! 😁
당신이 그것을 즐겼기를 바랍니다! 😃
사진 제공: Clint Bustrillos on Unsplash
Reference
이 문제에 관하여(여기 문서가 있습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/franciscello/here-be-docs-4da6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)