2
Ich weiß '=' kann nicht direkt in Perl überladen werden, aber ich möchte in der Lage sein, '=' zu verwenden, um den Kopierkonstruktor für eines meiner Objekte aufzurufen.Wie kann ich '=' einen Kopierkonstruktor in Perl aufrufen lassen?
Beispiel:
my $object1 = Object->new('value' => 1);
# I want this to invoke the copy constructor of "$object1" instead of copying a reference
my $object2 = $object1;
# This should not modify "$object1"
$object2->set_value(12);
print $object1->get_value()."\n";
print $object2->get_value()."\n";
Ich möchte die Ausgabe sein:
1
12
Wie kann ich diese Arbeit machen?
Perl nicht Konstrukteure haben, kopieren oder auf andere Weise. Konvention ist eine Methode namens "Klon" zu erstellen. // Sie können [this] (http://search.cpan.org/perldoc?overload#Copy_Constructor) verwenden, um das Copy-on-Write auszuführen, wenn Ihr Objekt unveränderlich ist, außer durch überladene Operatoren. Aber das ist hier nicht der Fall. – ikegami
Ich denke, ich kann mein Objekt unveränderlich machen, außer für überladene Operatoren. Das scheint der eleganteste Ansatz zu sein. – tjwrona1992
Behandeln Sie Perl als Perl und nicht als C++. Wenn Sie versuchen, Semantik, die Sie mit anderen Sprachen verwendet haben, irgendwie zu erzwingen, werden Sie nie eine glückliche Beziehung mit der Sprache haben. –