Thread Currying in Schleifen (18 answers)
Opened by flowdy at 2012-11-06 22:47

flowdy
 2012-11-09 22:25
#163229 #163229
User since
2012-08-03
45 Artikel
BenutzerIn

user image
Quote
Abgesehen davon ist die Exceptionbehandlung nicht unbedingt besonders schnell und könnte die Schleife ausbremsen, wenn sie in jedem Schritt durchlaufen wird.


Stimmt, kann mir auch nicht vorstellen, dass die Perlentwickler auch nur im Traum daran denken, die Generierung und Behandlung von $@ auf Geschwindigkeit zu optimieren. Wenn das sinnvoll wäre, dann auch, Schaufensterpuppen Grimassen beizubringen. Nein, schnell dürfte diese Lösung wirklich nicht sein.

Allerdings ging es mir eher um Intuitivität im Aufrufkontext. Die zu erhöhen geht eben gern auf Kosten der Verständlichkeit des Modulcodes (ohne damit sagen zu wollen, dass man in Modulcode alle guten Sitten über Bord werfen könne).

Einerlei, ich habe mich von climb_up() ganz verabschiedet. Currying lohnt hier nicht. Refaktorisieren heißt nicht, den cleveren Coder zu geben.

[edit=15.11.]Trotzdem ist mir heute eine (theoretische) Alternative zu den langsamen Exceptions eingefallen: Zwei Integervariablen, die eine wird über die Closure inkrementiert, die andere regulär in der Schleife. Die Abbruchbedingung testet dann nicht, ob eine Exception geworfen wurde oder nicht, sondern ob die beiden Variablen gleich sind.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub Node::climb_up {
  my ($self, $proc) = @_;
  my ($i, $j, @return);
  my $return_onTop = sub { $j++; @_ };

  while ( $self = $self->parent_row ) {
    @return = $proc->($self, $return_onTop);
    last if ++$i > $j;
  } continue {
      $j = $i; # falls $return_onTop mehrmals aufgerufen wurde
  } 

  return @return;
}
[/edit]
Last edited: 2012-11-15 16:00:16 +0100 (CET)
package MyClass; sub new {\b\b\b\b\b\b\b\b\buse Moose;

View full thread Currying in Schleifen