Menu
Coddy logo textTech

Procs und Lambdas

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

Ein Block ist kein Objekt, Sie können ihn nicht in einer Variablen speichern. Wenn Sie ein Stück Code haben möchten, das Sie herumreichen, speichern und später aufrufen können, verpacken Sie es in einen Proc oder ein lambda.

Ein Proc wird mit Proc.new oder dem proc-Schlüsselwort erstellt. Rufen Sie es mit .call auf:

double = proc { |n| n * 2 }
puts double.call(5)   # 10
puts double.call(7)   # 14

Ein lambda ist ähnlich, aber strenger; es prüft, ob Sie die richtige Anzahl an Argumenten übergeben. Die Pfeil-Schreibweise -> ist die übliche Form:

square = ->(n) { n * n }
puts square.call(4)   # 16
puts square.(4)       # 16  (Kurzform für .call)

Beide können an eine Methode übergeben werden, die einen Block erwartet, indem ein & vorangestellt wird:

[1, 2, 3].map(&double)   # [2, 4, 6]
[1, 2, 3].map(&square)   # [1, 4, 9]

Verwenden Sie ein lambda, wenn Sie eine strengere Argumentprüfung wünschen; verwenden Sie ein Proc, wenn Sie ein leichteres, nachsichtigeres Verhalten bevorzugen.

challenge icon

Aufgabe

Einfach

Erstelle ein Lambda namens tripler, das eine Zahl entgegennimmt und diese multipliziert mit 3 zurückgibt.

Lies dann eine durch Kommas getrennte Liste von Ganzzahlen ein und gib auf separaten Zeilen Folgendes aus:

  1. Das Ergebnis des Aufrufs von tripler.call(10)
  2. Die eingegebenen Zahlen verdreifacht (verwende map(&tripler)) und verbunden mit ,

Für die Eingabe 1,2,3 lautet die Ausgabe:

30
3, 6, 9

Probier es selbst

# TODO: definiere `tripler` als Lambda

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: Zeile 1, gib tripler.call(10) aus
# TODO: Zeile 2, mappe numbers mit &tripler, verbinde mit ", "
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

Übe selbstständig: Online-Ruby-Compiler