Thread sub mit statischem Speicher
(28 answers)
Opened by worst_case at 2019-01-26 20:27 2019-01-27T09:41:09 worst_case Da vermute ich, dass Du die Möglichkeiten von Closures unterschätzt :) 2019-01-27T09:41:09 worst_case Bei diesen Konstruktionen ist mir nicht klar, was sie bedeuten sollen. Ist "1=starte inkrement bis hundert" ein weiterer Übergabeparameter? Oder das Resultat von my_funktion1(1,100)? Warum soll my_funktion2(1,300) 0=stoppe inkrement bis hundert ein Inkrement bis 100 stoppen? Hier mal ein etwas längeres Beispiel, bei dem ich Zähler erzeuge. Jeder Zähler hat seinen eigenen Wert, kann mit einem Parameter angehalten und wieder beendet werden, und und zählt bis zu einem Endwert. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 use 5.010; use strict; use warnings; sub make_counter { my $end = shift; return sub { my $aktion = shift; state $wert = 0; state $gestartet = 1; defined $aktion and $gestartet = $aktion; my $name = "Z$end"; if ($wert >= $end) { say "$name: Wert = $wert (beendet)"; } elsif ($gestartet) { $wert++; say "$name: Wert = $wert"; } else { say "$name: Wert = $wert (angehalten)"; } } } my $funktion1 = make_counter(3); my $funktion2 = make_counter(2); $funktion1->(); # Z3: Wert = 1 $funktion1->(); # Z3: Wert = 2 $funktion2->(); # Z2: Wert = 1 $funktion1->(0); # Z3: Wert = 2 (angehalten) $funktion2->(); # Z2: Wert = 2 $funktion1->(); # Z3: Wert = 2 (angehalten) $funktion1->(1); # Z3: Wert = 3 $funktion2->(1); # Z2: Wert = 2 (beendet) $funktion1->(); # Z3: Wert = 3 (beendet) $funktion1->(0); # Z3: Wert = 3 (beendet) |