Beat: Anhang

Beitrag lesen

So würde nur die Möglichkeit bleiben mit eval in der Konstruktorphase diese Methoden zu erzeugen. Das hat aber, so meine ich, eine empfindliche Performance Einbusse.
Naja, das scheint mir für das Namensraumproblem nicht angemessen.

Sowas läßt sich mit der Technik, die z.b. in
Class::Accessor verwendet wird umsetzen.

Hallo Struppi

Ich habe deinen Code mal ausprobiert, und der funktioniert so auch.
Aber ich habe trotzdem Probleme, ihn ganz zu verstehen.

#!/usr/bin/perl -w  
use strict;  
use constant NL => "\n";  
package Accessor;  
  
sub new {  
  my $proto = shift;  
  my $p = shift || 'x_';               ## prefix nach Eingabe oder Default 'x_'  
  my %dummy;                           ## nicht wirklich nur dummy sondern DER DatenHash  
                                       ## oder ??  
  no strict 'refs';                    ## wegen typeglob  
  foreach my $func (qw(a b c)) {       ## in Schleife mehrere S/Getter setzen  
      *{"${proto}::$p$func"} = sub {   ## tricky. Subclassen  
       my $self = shift;               ## was'n das für n'Rest?  
                                       ## Klar, Objektreferenz hat keine Funktion mehr  
       $dummy{$func} = $_[0] if @_;    ## OK  
       return $dummy{$func};  
     };  
   }  
  my $self = bless \%dummy, $proto;  
  return $self;                        ## meine Kosmetik  
}  

Ich durchschaue es noch nicht ganz.
Aber wenn ich es richtig interpretiere, wird eigentlich
aus einer Klasse Subklassen abgeleitet.
Der Trick mit dem Typeglob bewirkt Eintrage der
anonymen Subfunktionen in die Symboltable,
'magisch' existiert also in der Symboltable ein
&{Accessor::x_a} (als Sub ansrechbar)
${Accessor::x_a} (als Referenz ansprechbar)

So kann also die Methode (hier die anonyme Subfunktion) in einer Referenz gespeichert werden, und denoch ist sie über den normalen Methoden zugriff mit dem -> Operator ansprechbar.

Einer Typeglob Version bin ich gestern bei der Lekture hier begegnet:
  http://www.perldesignpatterns.com/?AccessorPattern
  im oberen Abschnitt: "Writing Accessors is Tedious "

Das sieht insgesamt sehr elegant aus, vor allem, weil man von den Subclassen von aussen eigentlich nichts sieht.

my $y = new Accessor('y_');
$y->y_a('y accessor');
print $y->y_a(), "\n";

mfg Beat

--
Selber klauen ist schöner!
0 69

Mein erstes kleines Modülchen...

Patrick Andrieu
  • perl
  1. 0
    Cheatah
    1. 0
      Patrick Andrieu
      1. 0
        Cheatah
        1. 0
          Patrick Andrieu
    2. 0
      Patrick Andrieu
      1. 0
        Patrick Andrieu
  2. 0
    hotti
  3. 0
    hotti
    1. 0
      Patrick Andrieu
  4. 0
    Adolf
    1. 0
      Patrick Andrieu
      1. 0
        Adolf
        1. 0
          Patrick Andrieu
  5. 0
    Beat
    1. 0
      Patrick Andrieu
  6. 0
    Struppi
    1. 0
      Patrick Andrieu
      1. 0
        Struppi
        1. 0

          Mein erstes kleines Modülchen... und Grundsatzfragen!

          Patrick Andrieu
          1. 0
            Struppi
            1. 0
              Patrick Andrieu
  7. 0

    Mein erstes (nicht mehr so kleines) Modülchen...

    Patrick Andrieu
    1. 0
      Beat
      1. 0

        Anhang

        Beat
        1. 0
          Skrilax
          1. 0
            Beat
            1. 0
              Struppi
              1. 0
                Struppi
              2. 0
                Beat
                1. 0
                  Struppi
                  1. 0
                    Beat
                    1. 0
                      Struppi
                      1. 0
                        Beat
                        1. 0
                          Struppi
                          1. 0
                            Siechfred
                            1. 0
                              Struppi
                              1. 0
                                Siechfred
                          2. 0
                            Beat
                            1. 0
                              Struppi
      2. 0
        Patrick Andrieu
    2. 0
      Christoph
      1. 0
        Patrick Andrieu
        1. 0
          Christoph
          1. 0
            Patrick Andrieu
    3. 0
      Siechfred
      1. 0
        Patrick Andrieu
        1. 0
          Patrick Andrieu
          1. 0
            Tim Tepaße
        2. 0
          Harlequin
        3. 0
          Tim Tepaße
          1. 0
            Patrick Andrieu
            1. 0
              at
              1. 0
                Patrick Andrieu
                1. 0
                  at
            2. 0
              Tim Tepaße
              1. 0
                Patrick Andrieu
              2. 0

                Date::Today released and with POD

                Patrick Andrieu
                1. 0
                  Christoph
                  1. 0
                    Patrick Andrieu
  8. 0

    Kritik und Regel für Wochenzählung

    Patrick Andrieu
    1. 0
      Patrick Andrieu
      1. 0
        at
        1. 0
          Patrick Andrieu
    2. 0
      Patrick Andrieu
      1. 0
        Beat
        1. 0
          Patrick Andrieu
          1. 0
            Beat
            1. 0
              Patrick Andrieu