Thread Currying in Schleifen
(18 answers)
Opened by flowdy at 2012-11-06 22:47
Hallo,
ich habe eine Funktion $node->climb_up($curry_sub), die einen Baum von unten nach oben, also aus der Tiefe zur Wurzel durchläuft und jeden Knoten an &$curry_sub übergibt. Nun kann &$curry_sub jederzeit befinden, dass kein weiterer Aufruf mehr getätigt, die Schleife abgebrochen werden soll. Auch return-Aufrufe in &$curry_sub führen zum Abbruch der Schleife und etwaige Rückgabewerte reicht climb_up bloß noch nach draußen durch. Was ich nicht möchte:
Dann muss also eine extra Variable her Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 sub Node::climb_up { my ($self, $sub, $cont) = @_; my $p = $self; my @ret; while ( $p = $p->parent_row ) { @ret = $sub->($p,\$cont); next if $cont; } return @ret; } Oder vielleicht besser? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sub Node::climb_up { my ($self, undef, $sub) = @_; my $cont = \$_[1]; # Referenz auf urspr. Wert (Pass-by-Reference) my $p = $self; my @ret; while ( $p = $p->parent_row ) { @ret = $sub->($p); next if $$cont; } return @ret; } my $continue; my $curry_return = $node->climb_up($continue = 1, sub { my $node = shift; ... $continue = ...; return $in_spe; }); Gibt es noch bessere Ideen? Ich suche nach einem guten Kompromiss zwischen Klarheit und Kürze im Aufrufkontext von &climb_up. Danke, flowdy Last edited: 2012-11-06 22:48:57 +0100 (CET) package MyClass; sub new {\b\b\b\b\b\b\b\b\buse Moose;
|