Thread [Mouse] Attribute zur Laufzeit generieren und vererben
(5 answers)
Opened by GwenDragon at 2023-07-24 17:10 2023-07-25T08:48:59 GwenDragonBeinuhe! Probier's einfach mit meinem kurzen Beispiel aus, indem Du in der letzten Zeile anstelle von $c->text->Name schreibst: $c->text->{Name}. Funktioniert genauso. Ist aber unsauber und funktioniert nur, solange der Autor der Klasse bei Mouse bleibt und nicht etwa eines der nicht-Hash-Objektframeworks (deren gibt's auch etliche) verwendet. Es ist auch nicht ganz genau das gleiche. Die Methode ->Name existiert deswegen, weil ich das Attribut Name mit is => 'ro' deklariert habe. 2023-07-25T08:48:59 GwenDragonIn meinem Beispiel schon nicht mehr: Der Versuch $c->text->Name('Mehrwert') wird abgelehnt: Code: (dl
)
Cannot assign a value to a read-only accessor of Name Man sehe: Ich habe das Attribut als 'ro' (readonly) deklariert und nicht als 'rw' (read/write). Irgendwie blöd, dass $c->text->{Name} = 'Mehrwert'; trotzdem funktioniert. 2023-07-25T08:48:59 GwenDragonNicht bei den M*-Objekthelfern! Es geht bei denen überwiegend um Komfortgewinn für "anständige" Programmierer: Die Accessor-Methoden werden automatisch generiert, und beim Konstruktor wird der Typ von Parametern automagisch überprüft. OO-Features wie Vererbung, Rollen und Delegation bekommt man auch komfortabel, aber eben ... mit Kollisionsgefahr bei den Hash-Keys. Das ist ja der Grund, warum andere Objektsysteme entstanden sind: Da gibt's zum einen die ganze Latte von "Inside-Out"-Objektmodulen (von ![]() ![]() ![]() ![]() Und dann gibt's eben mit ![]() 2023-07-25T08:48:59 GwenDragonDafür gibt's etliches auf CPAN, zum Beispiel ![]() |