yield 키워드
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 17번째.
직접 정의하는 메서드도 내장 메서드와 마찬가지로 블록을 받을 수 있습니다. 메서드 내부에서 yield 키워드는 호출자가 전달한 블록을 실행합니다.
def greet
puts "Before block"
yield
puts "After block"
end
greet do
puts "Hi from the block!"
end
# Before block
# Hi from the block!
# After blockyield에 인수를 전달하여 블록으로 보낼 수 있습니다:
def with_each(items)
items.each { |item| yield item }
end
with_each([10, 20, 30]) { |n| puts n }
# 10
# 20
# 30메서드가 yield를 호출했지만 호출자가 블록을 전달하지 않으면 Ruby는 에러를 발생시킵니다. block_given?을 사용하면 이를 미리 확인할 수 있습니다:
def maybe
yield if block_given?
end
maybe # 아무 일도 일어나지 않음
maybe { puts "called!" } # 호출됨!챌린지
쉬움하나의 인자 n(정수)을 받고 1, 2, ..., n의 값을 블록에 하나씩 전달(yield)하는 repeat라는 이름의 메서드를 정의하세요.
그런 다음 n = 4와 전달된 각 값에 대해 "Got <value>"를 출력하는 블록을 사용하여 메서드를 호출하세요.
출력 결과는 다음과 같습니다:
Got 1
Got 2
Got 3
Got 4치트 시트
메서드 내부에서 yield를 사용하여 호출자가 전달한 블록을 실행합니다:
def greet
yield
end
greet { puts "Hi!" } # Hi!yield를 통해 블록에 인수를 전달합니다:
def with_each(items)
items.each { |item| yield item }
end
with_each([1, 2]) { |n| puts n }yield를 호출하기 전에 블록이 제공되었는지 확인하려면 block_given?을 사용합니다:
def maybe
yield if block_given?
end직접 해보기
# TODO: 1..n을 블록으로 `yield`하는 `repeat` 정의하기
# TODO: "Got <value>"를 출력하는 블록과 함께 `repeat(4)` 호출하기
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.