Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Funktionale Programmierung / Lambdas und Closures
Closures
Eine Closure ist eine Subroutine, die Variablen aus dem Bereich einfängt, in dem sie definiert wurde, und sie am Leben hält, selbst nachdem dieser Bereich geendet hat. Damit erhält die Subroutine ihren eigenen, dauerhaften Zustand.
Das klassische Beispiel ist ein Zähler:
sub make-counter {
my $n = 0;
return sub { ++$n };
}
my &count = make-counter;
say count(); # 1
say count(); # 2
say count(); # 3Die Variable $n ist innerhalb von
make-counter deklariert. Die zurückgegebene Subroutine
verweist auf $n und schließt sich also um sie: Jeder Aufruf
von count erhöht und liefert dieselbe
$n, obwohl make-counter selbst längst fertig
ist.
Jeder Aufruf von make-counter erzeugt eine frische
$n, getrennte Zähler sind also unabhängig:
my &a = make-counter;
my &b = make-counter;
say a(); # 1
say a(); # 2
say b(); # 1Closures erlauben es einer Funktion, Zustand mitzutragen, ohne globale Variable und ohne Objekt. Sie sind die funktionale Art, sich zwischen Aufrufen etwas zu merken.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Quiz — Lambdas | Quiz — Closures →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.