我需要为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');
你打算如何在实例上创建方法?在基于类的对象系统中,这意味着什么? – 2014-10-12 13:02:26
据我所知,Moose属性存储在对象实例的哈希中,所以如果我在第一个实例中添加一个属性,为什么这个属性也存在于下一个创建的实例中,这个问题呢?我的问题现在清楚了吗? – daliaessam 2014-10-12 13:09:56