Thread Counter innerhalb einer Klasse? (19 answers)
Opened by JackBauer at 2008-05-07 14:48

sid burn
 2008-05-07 16:15
#109373 #109373
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
@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.

Achso, na dann habe ich dich vollkommen falsch verstanden.
Ich dachte du wolltest nen Klassencounter. Also nen Counter in der Klasse der die Objekte zählt.

Ansonsten ist das was du ja willst nur nen simples attribut das du beliebig incr/decrementieren kannst. Nur anstatt $self->{counter} += 1; möchtest du anscheinend $self->counter += 1.

Also einen Sinn darin sehe ich nicht unbedingt. Lvalue kannst du machen aber ich finde das ist auch zu magisch und wegen experimentel würde ich es auch nicht nutzen. Ein anderer ansatz wäre ansonsten noch eine kleine Counter Klasse wo du die Operatoren überlädst.

Aber ich finde solch eine Technik eher schlecht als gut. Bei $self->counter += 1 vermutet man nicht das dieses auch intern den counter neu setzt da es eben ein Methodenaufruf ist der nur etwas zurück gibt.

Spätestens wenn du sowas schreibst << printf "Anzahl: %d\n", $obj->counter + 1 >> wunderst du dich warum du auch den counter im objekt erhöhst.

Ich würde sowas ehrlich gesagt sein lassen. Welchen Vorteil es brnigen soll ist mir auch ein Rätsel.

Quote
@KurtZ Das war jetzt eine Analogie zu Java / C++. Dort kann man int x += 5; schreiben als Kurzform für int x = x + 5;

Kannst du in Perl doch genauso...

Nur du rufst bei $self->counter eine Methode auf die etwas zurück gibt und möchtest den Wert addieren und das ergebnis soll automatisch wieder gesetzt werden. Das ist was ganz anderes... Vielleicht wird es dir mir Klammern einleuchtender was du tust.

Code: (dl )
$self->counter() += 5


Ich würde es lieber so machen.
Code: (dl )
1
2
3
$self->counter(5); # setzen
$self->add_counter(4); # 4 dazu addieren
$self->del_counter(3); # 3 wieder abziehen


oder folgendermaßen.

Code: (dl )
1
2
3
$self->counter(5); # setzen
$self->counter('+', 4); # 4 dazu addieren
$self->counter('-', 2); # 2 wieder subtrahieren
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Counter innerhalb einer Klasse?