2016-03-24 44 views
2

'=' Perl'de doğrudan aşırı yüklenemediğini biliyorum, ancak nesnelerimden biri için kopya oluşturucuyu çağırmak için '=' öğesini kullanmak istiyorum.Perl'de bir kopya oluşturucuyu '=' nasıl yapabilirim?

örnek:

1 
12 

nasıl bu iş yapabilirsiniz:

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"; 

Ben çıkış olmak istiyorum?

+4

Perl, Kurucular kopyalamak veya başka şekilde değil. Sözleşme, “klon” adı verilen bir yöntem oluşturmaktır. // Nesnenin aşırı yüklenen operatörler haricinde değişmezse, yazma işlemi yapmak için [this] (http://search.cpan.org/perldoc?overload#Copy_Constructor) kullanabilirsiniz. Ama burada durum böyle değil. – ikegami

+0

Sanırım aşırı yüklenen operatörler dışında nesneyi değişmez yapabilirim. Bu en zarif yaklaşım olabilir gibi görünüyor. – tjwrona1992

+1

Lütfen Perl'i C++ olarak değil Perl olarak kabul edin. Bir şekilde diğer dillerle kullandığınız semantikleri zorlamaya çalışırsanız, dil ile asla mutlu bir ilişkiniz olmayacaktır. –

cevap

1

Verileri kopyalamak için Clone modülünü kullanabilirsiniz.

Örnek:

package Foo; 
use parent 'Clone'; 
sub new { bless {}, shift } 

package main; 

my $obj = Foo->new; 
my $copy = $obj->clone;