Мне нужно добавить атрибут к экземпляру класса Moose. В приведенном ниже коде, когда я создаю экземпляр класса Child и добавляю к нему атрибут «app», я считаю, что этот атрибут также добавляется при создании следующих экземпляров. То, что я делаю неправильно, снова мне нужен атрибут для каждого созданного экземпляра.Perl Moose добавить атрибут экземпляра не атрибут класса
#!C:\perl\bin\perl.exe
#!/usr/bin/perl
use v5.10;
use Moose;
use Data::Dumper;
{
package Child;
use Moose;
use utf8;
sub name {
say "My name is Richard";
}
}
sub add_attribute {
my ($object, $attr) = @_;
my $meta = $object->meta;
if (!$object->can("app")) {
$meta->add_attribute(app => (is => 'rw', default => sub{$attr}));
$object->app($attr);
}
else {
#$object->app($attr);
say "attr $attr already exists: object=". ref($object) . ", attr=".($object->app);
}
}
my $child = Child->new;
$child->name;
add_attribute($child, "First");
say "Child Attr: " . $child->app;
say "";
say Dumper($child);
my $child1 = Child->new;
$child1->name;
#add_attribute($child1, "Second");
say "Child1 Attr: " . $child1->app;
say Dumper($child1);
#say Dumper($child1->meta);
выход:
My name is Richard
Child Attr: First
$VAR1 = bless({
'app' => 'First'
}, 'Child');
My name is Richard
Child1 Attr: First
$VAR1 = bless({
'app' => 'First'
}, 'Child');
Как вы собираетесь создавать методы на экземпляре? Что это означало бы в контексте объектной системы на основе классов? –
Насколько я понимаю, атрибуты Moose хранятся в хеше в экземпляре объекта, поэтому вопрос, добавляю ли я атрибут в первом экземпляре, почему этот атрибут также существует в следующих созданных экземплярах? Является ли мой вопрос ясным сейчас? – daliaessam