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 blokuMoż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
# 30Jeś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!Wyzwanie
ŁatwyZdefiniuj 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 4Spró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>"
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
1Łańcuchy znaków w szczegółach
Przegląd metod łańcuchów znakówInterpolacja łańcuchów znakówIterowanie po łańcuchach znakówDzielenie i łączeniePowtórka – Tkacz łańcuchów znaków4Bloki, procki i lambdy
Czym jest blok?do..end a nawiasy klamroweSłowo kluczowe yieldParametry blokuProcki i lambdyPodsumowanie — własny iterator7Hashe, część 2
Hash.new z wartościami domyślnymiIterowanie po haszachZagnieżdżone haszeŁączenie i przekształcaniePowtórka — licznik częstotliwości10Projekt – ewidencja uczniów
Przegląd projektuDodawanie ucznia5Potęga Enumerable
Select i RejectŁączenie wywołań mapReduce / Injectcount, all?, any?, none?group_by i partitionsort_by, min_by, max_byPodsumowanie — potok danych8Zaawansowane podejmowanie decyzji
case z klasami i wyrażeniami regularnymiwhen z wieloma wartościamiOperator trójargumentowyInline if / unlessPowtórka – klasyfikator ocenPoćwicz samodzielnie: Kompilator Ruby online