Thread OOP: Einem vorhandenen Objekte weitere Hashes hinzufügen (6 answers)
Opened by Phrosch at 2019-12-05 04:52

Daxim
 2019-12-05 09:50
#190950 #190950
User since
2007-08-01
114 Artikel
BenutzerIn
[Homepage]
user image
Es ist zum grundlegenden Verständnis hilfreich, Vorrangklammern einzufügen.

Code (perl): (dl )
return(bless(\%args => $class));

Ich muss zwei falsche Annahmen korrigieren:

Quote
bless auf den benannten Hash %args angewendet wird

bless möchte als erstes Argument eine Referenz (hier: Hashreferenz), keinen Hash. Ich erzeuge sie mit \, in deinem Code erzeugst du sie mit dem {}-Zirkumfixoperator.

Quote
einem %Hash als ganzes einen Skalar zuweisen

=> ist keine Zuweisung, sondern das dicke Komma. Ich weiß nicht, woher ich diese Gewohnheit im Zusammenhang mit bless habe, aber ich bin nicht allein damit.

Ein gewöhnliches Komma ist auch in Ordnung hier. (Das zweite Argument von bless ist der Klassenbezeichner, wie du weißt.)

In der offiziellen Doku ist nur das gewöhnliche Komma zu finden. Tut mir leid für die Verwirrung, das war nicht beabsichtigt; ich bin nicht davon ausgegangen, dass du => nicht kennst.

----

Quote
Wird der Hash hier nur "als mittel zum Zweck […] so dass der Name %args verworfen wird?

Richtig, der Bezeichner wird am Ende des Konstruktors verworfen, weil die dazugehörige Variable aufhört, zu existieren. Die damit erzeugte Hashreferenz überlebt, weil der Wert an den Aufrufer zurückgegeben wird; sie ist per se unbenannt und erhält immer wieder nur einen neuen Bezeichner, wenn sie als Wert einer Variable zugewiesen wird, z.B. als Argument in einer anderen Subroutine/Methode landet, dort typischerweise $self.

View full thread OOP: Einem vorhandenen Objekte weitere Hashes hinzufügen