Schrift
[thread]11771[/thread]

Counter innerhalb einer Klasse?

Leser: 1


<< |< 1 2 >| >> 20 Einträge, 2 Seiten
JackBauer
 2008-05-07 14:48
#109350 #109350
User since
2008-04-30
16 Artikel
BenutzerIn
[default_avatar]
Hi,

wie genau realisiere ich in Perl innerhalb einer Instanz einer Klasse einen Counter?

Bisher habe ich nur mit Getter/Setter Funktionen auf meine Instanzvariablen zugegriffen. Wie kann ich direkt auf die Werte zugreifen?

Mein Ansatz war der folgende:

Code (perl): (dl )
1
2
3
4
5
6
sub count
{
    my $self=shift;
    if (@_) { $self->{count} += shift }
    return $self->{count};
}


So etwas wäre mein Wunsch:

Code (perl): (dl )
1
2
my $value = 5;
$self->counter +=  $value


Gruß

JackBauer
Struppi
 2008-05-07 14:57
#109353 #109353
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Es reicht deine Frage einmal zu stellen.
moritz
 2008-05-07 14:57
#109354 #109354
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Das geht mit dem lvalue-Atrribute aus dem Modul attributes. Ob das eine gute Idee ist ist die nächste Frage. Siehe auch perlsub.
KurtZ
 2008-05-07 15:14
#109356 #109356
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Hi

JackBauer+2008-05-07 12:48:42--
Mein Ansatz war der folgende:

Code (perl): (dl )
1
2
3
4
5
6
sub count
{
    my $self=shift;
    if (@_) { $self->{count} += shift }
    return $self->{count};
}


verstehe nicht ganz was daran schlecht ist... count ist doch eine Methode deines Objekts oder?

IMHO sollte man Mutatoren bei externem Zugriff verwenden, innerhalb der Klasse kann man auch direkt auf die Variable zugreifen.

Sollte die Klasse so komplex sein dass Mutatoren bereits intern wartungstechnich Sinn machen, ist die Klasse höchstwahrscheinlich schon zu aufgebläht und sollte m.E. selbst wieder in mehrere aufgeteilt werden.
TMTOWTDYOG (there's more than one way to dig your own grave)
JackBauer
 2008-05-07 15:20
#109357 #109357
User since
2008-04-30
16 Artikel
BenutzerIn
[default_avatar]
@Struppi Sorry, wollte den Thread eigebtlich nur einmal öffnen

@sid burn Mit deinen Sources kann ich allerdings nur die Anzahl meiner Objekte zählen, welche widerum für mich nicht interessant ist. Ich benötige einen einfachen counter, den ich innerhalb meiner Insatnz beliebig inkrementieren, dekrementieren und ausgeben kann.

Den Zählerstand erhöhen und ausgeben kann ich - wenn auch etwas unschön - jetzt schon:

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
sub new 
{
        my $class = shift;
        my $self  = {};
        ....
        $self->{total}          = 0;
        
        bless ($self, $class);
        return $self;
}

...

sub count
{
        my $self=shift;
    if (@_) { $self->{count} += shift }
    return $self->{count};
}

sub test
{
     my $self = shift;
     $self->count(1);
      print $self->count."\n";
}


Ich werde mir nun mal die Dokumentation über Lvalue subroutines durchlesen ...

Edit:

Habe gerade das hier gefunden: Link

Vielleicht kann ich es ja genauso machen, wie dort der counter verwendet wird?!?


Gruß

JackBauer
KurtZ
 2008-05-07 15:25
#109358 #109358
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Jack, der Ordnung halber könntest du in deinem OP einen Link zum anderen Thread nachtragen.
TMTOWTDYOG (there's more than one way to dig your own grave)
pq
 2008-05-07 15:31
#109360 #109360
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
JackBauer+2008-05-07 13:20:05--
@Struppi Sorry, wollte den Thread eigebtlich nur einmal öffnen

passiert hier vielen, ist ein fehler in der board-software.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Struppi
 2008-05-07 15:38
#109362 #109362
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
JackBauer+2008-05-07 13:20:05--
Habe gerade das hier gefunden: Link

Vielleicht kann ich es ja genauso machen, wie dort der counter verwendet wird?!?
Das ist etwas anderes, dort wird ein statischer Counter verwendet, also einer der bei allen Klassen dieses Typs gleich ist, ansonsten sehe ich nicht was der dortige Code mit deinem Beispiel zu tun hat, du wolltest doch einen Wert um 5 erhöhen?
JackBauer
 2008-05-07 15:41
#109365 #109365
User since
2008-04-30
16 Artikel
BenutzerIn
[default_avatar]
Naja, ich dachte ich könnte dann vielleicht $Base::counter += 5; schreiben :-)
KurtZ
 2008-05-07 16:03
#109367 #109367
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
JackBauer+2008-05-07 13:41:52--
Naja, ich dachte ich könnte dann vielleicht $Base::counter += 5; schreiben :-)

Hä ???
TMTOWTDYOG (there's more than one way to dig your own grave)
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2008-05-07 14:48.