Ruby에서 "yield"라는 단어는 무엇을 의미합니까? 정확히 무엇을 합니까?
음...
Yield는 키워드(언어의 핵심 부분임을 의미)이며 블록을 호출하는 메소드 내부에서 사용됩니다.
알아야 할 사항 :
- 블록을 호출하면 해당 블록 내부의 코드가 실행됩니다(예:메서드 호출)
- Yield는 블록에 임의의 수의 인수를 전달할 수 있습니다.
- 블록의 반환 값은
yield
의 반환 값이 됩니다.
이를 이해하려면 블록을 이해해야 합니다.
블록은 다른 메서드에 추가 인수로 전달할 수 있는 이름이 없는 메서드로 생각할 수 있습니다.
예시 :
def make_salad yield "lettuce" yield "carrots" yield "olive oil" end make_salad { |ingredient| puts "Adding #{ingredient} to salad!" }
블록을 3번 호출하여 이 출력을 생성합니다. :
Adding lettuce to salad! Adding carrots to salad! Adding olive oil to salad!
이것이 본질적으로 yield
입니다. 하는 것은 메서드를 호출하는 것과 같지만 대신 블록을 호출하는 것입니다.
블록 이름이 없으므로 이 키워드가 알아서 처리합니다.
지금 :
호출할 블록이 없으면 어떻게 되는지 알아보겠습니다.
블록 없는 수율 ==오류 메시지
yield
를 호출하면 블록이 없으면 오류가 발생합니다.
예 :
def write_code yield end write_code # LocalJumpError: no block given (yield)
이 오류는 명확합니다. "블록이 제공되지 않음"은 write_code
메서드 호출을 의미합니다. 차단을 제공하지 않습니다.
이 오류를 방지하려면 어떻게 해야 하나요?
다음과 같이:
def write_code yield if block_given? end
block_given?
메소드는 블록이 사용 가능한지 확인하고 yield
만 허용합니다. 그게 사실이라면.
수율을 사용하는 이유
yield
사용 차단을 활성화합니다.
블록을 사용하여 메서드 호출의 일부로 코드 비트를 전달합니다.
이는 다음과 같은 경우에 유용합니다. :
- 일부 코드를 실행하는 데 걸리는 시간을 기록하는 일반 로깅 기능을 작성하려고 합니다.
- 메소드가 완료되면 일부 코드를 실행하려는 경우(예:자바스크립트의 "콜백")
- 필요할 때만 실행되고 사용자가 사용자 정의할 수 있는 코드인 "지연 코드"를 원합니다(예:
Hash#fetch
참조). 방법)
좋아요!
Yield_Self – 차이점은 무엇입니까?
이 새로운 yield_self
를 찾을 수 있습니다. 방법 및 yield
와 관련이 있다고 생각합니다. .
그렇지 않습니다.
짝수 yield(self)
self는 현재 개체를 참조하기 때문에 다릅니다.
yield_self
Ruby 2.5에 추가된 은 메서드를 호출하는 객체를 나타냅니다.
이 방법을 잘 사용합니까?
메서드를 연결하고 yield_self
를 호출하는 개체로 작업을 수행할 때마다 사용하세요. 에.
원래 개체 대신 결과를 반환하는 동안.
예 :
n_squared = ->(n) { n ** 2 } 2 .yield_self(&n_squared) .yield_self(&n_squared) # 16
Ruby 2.6에는 yield_self
에 대한 별칭이 있습니다. , then
방법.
그러나 일반 yield
과 혼동하지 마십시오. .
알겠어요?
Rails의 수율
yield
의 사용에 대해서도 간단히 언급하겠습니다. Rails 및 템플릿 엔진에서.
yield
을 찾을 수 있습니다. 내부 레이아웃.
Rails는 이를 렌더링 중인 뷰의 콘텐츠로 대체합니다.
yield
없음 빈 레이아웃과 같습니다!
이것이 레이아웃과 보기가 결합되는 방식입니다.
요약
Ruby의 yield 키워드에 대해 배웠습니다! 그것이 무엇인지, 어떻게 작동하며 왜 중요한지 정확히 알려주세요.
이제 Ruby 코드에서 시도해 보십시오.
읽어 주셔서 감사합니다! 🙂