2016-03-24 2 views
2

Я знаю, что '=' не может быть непосредственно перегружен в Perl, но я хочу иметь возможность использовать '=' для вызова конструктора копирования для одного из моих объектов.Как я могу сделать '=' вызов конструктора копирования в Perl?

пример:

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

Я хочу выход быть:

1 
12 

Как я могу сделать эту работу?

+4

Perl не имеет конструкторов, копировать или иным образом. Конвенция заключается в создании метода под названием «клон». // Вы можете использовать [this] (http://search.cpan.org/perldoc?overload#Copy_Constructor) для копирования по-записи, если ваш объект неизменен, за исключением перегруженных операторов. Но это не так. – ikegami

+0

Я думаю, что могу сделать свой объект неизменным, кроме перегруженных операторов. Похоже, что это самый элегантный подход. – tjwrona1992

+1

Обработайте Perl как Perl, а не C++. Если вы попытаетесь каким-то образом применить семантику, которую вы использовали с другими языками, у вас никогда не будет счастливых отношений с языком. –

ответ

1

Для клонирования данных вы можете использовать модуль Clone.

Пример:

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

package main; 

my $obj = Foo->new; 
my $copy = $obj->clone; 
Смежные вопросы