Menu
Coddy logo textTech

Das yield-Schlüsselwort

Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 17 von 56.

Methoden, die Sie selbst definieren, können einen Block entgegennehmen, genau wie die eingebauten. Innerhalb der Methode führt das Schlüsselwort yield den Block aus, den der Aufrufer übergeben hat.

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 block

Du kannst Argumente an den Block übergeben, indem du sie an yield übergibst:

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

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

Wenn eine Methode yield aufruft, der Aufrufer aber keinen Block übergeben hat, löst Ruby einen Fehler aus. Mit block_given? können Sie dies vorher prüfen:

def maybe
  yield if block_given?
end

maybe                       # nichts passiert
maybe { puts "called!" }    # aufgerufen!
challenge icon

Aufgabe

Einfach

Definieren Sie eine Methode namens repeat, die ein Argument n (eine Ganzzahl) entgegennimmt und die Werte 1, 2, ..., n nacheinander an ihren Block übergibt (yield).

Rufen Sie dann Ihre Methode mit n = 4 und einem Block auf, der "Got <value>" für jeden übergebenen Wert ausgibt.

Die Ausgabe lautet:

Got 1
Got 2
Got 3
Got 4

Spickzettel

Verwenden Sie yield innerhalb einer Methode, um den vom Aufrufer übergebenen Block auszuführen:

def greet
  yield
end

greet { puts "Hi!" } # Hi!

Übergeben Sie Argumente an den Block mittels yield:

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

with_each([1, 2]) { |n| puts n }

Verwenden Sie block_given?, um zu prüfen, ob ein Block bereitgestellt wurde, bevor yield aufgerufen wird:

def maybe
  yield if block_given?
end

Probier es selbst

# TODO: definiere `repeat`, das 1..n an seinen Block übergibt

# TODO: rufe repeat(4) mit einem Block auf, der "Got <value>" ausgibt
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmfluss