Menu
Coddy logo textTech

Słowo kluczowe yield

Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 17 z 56.

Metody, które definiujesz samodzielnie, mogą przyjmować blok, tak jak te wbudowane. Wewnątrz metody słowo kluczowe yield uruchamia blok przekazany przez wywołującego.

def greet
  puts "Before block"
  yield
  puts "After block"
end

greet do
  puts "Hi from the block!"
end
# Przed blokiem
# Cześć z bloku!
# Po bloku

Możesz przekazywać argumenty do bloku, podając je do yield:

def with_each(items)
  items.each { |item| yield item }
end

with_each([10, 20, 30]) { |n| puts n }
# 10
# 20
# 30

Jeśli metoda wywołuje yield, ale wywołujący nie przekazał bloku, Ruby zgłasza błąd. block_given? pozwala najpierw to sprawdzić:

def maybe
  yield if block_given?
end

maybe                       # nic się nie dzieje
maybe { puts "called!" }    # called!
challenge icon

Wyzwanie

Łatwy

Zdefiniuj metodę o nazwie repeat, która przyjmuje jeden argument n (liczbę całkowitą) i przekazuje do swojego bloku wartości 1, 2, ..., n, po jednej na raz.

Następnie wywołaj swoją metodę z n = 4 i blokiem, który wypisuje "Got <value>" dla każdej przekazanej wartości.

Wynik to:

Got 1
Got 2
Got 3
Got 4

Spróbuj swoich sił

# TODO: zdefiniuj `repeat`, która przekazuje wartości 1..n do swojego bloku

# TODO: wywołaj repeat(4) z blokiem, który wypisuje "Got <value>"
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Ruby online