Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby의 Yield &Yield_Self 이해(전체 가이드)

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 코드에서 시도해 보십시오.

읽어 주셔서 감사합니다! 🙂