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, du kannst ihn nicht in einer Variablen speichern. Wenn du einen Codeabschnitt weitergeben, speichern und später aufrufen möchtest, verpackst du ihn in ein Proc oder ein lambda.

Ein Proc wird mit Proc.new oder dem Schlüsselwort proc erstellt. Rufe ihn mit .call auf:

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

Eine Lambda-Funktion ist ähnlich, aber strenger: Sie überprüft, ob du die richtige Anzahl an Argumenten übergibst. Die Pfeilform -> ist die übliche Schreibweise:

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 ihnen & vorangestellt wird:

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

Verwende ein Lambda, wenn du eine strengere Argumentprüfung möchtest; verwende ein Proc, wenn du ein weniger strenges, nachsichtigeres Verhalten möchtest.

challenge icon

Aufgabe

Einfach

Erstelle eine Lambda-Funktion namens tripler, die eine Zahl entgegennimmt und sie mit 3 multipliziert zurückgibt.

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

  1. Das Ergebnis des Aufrufs von tripler.call(10)
  2. Die verdreifachten Eingabezahlen (verwende map(&tripler)), 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