Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación funcional / Lambdas y clausuras / Exercises / Un contador

Solución: Un contador

Aquí tienes una posible solución para la tarea.

Código

sub make-counter($step) {
    my $n = 0;
    return sub { $n += $step };
}

my &count = make-counter(10);
say count();
say count();
say count();

🦋 Puedes encontrar el código fuente en el archivo counter.raku.

Salida

10
20
30

Comentarios

  1. La clausura captura dos cosas de make-counter: el parámetro $step y la variable privada $n. Ambas siguen vivas después de que make-counter retorne.

  2. Cada llamada suma $step a $n y devuelve el nuevo total. Un contador construido con un paso distinto avanzaría en esa cantidad.

Un contador   |   Un multiplicador