무스 클래스 인스턴스에 속성을 추가해야합니다. 아래 코드에서 Child 클래스의 인스턴스를 만들고 "app"속성을 추가하면 다음 인스턴스를 만들 때이 속성도 추가됩니다. 내가 뭘 잘못했는지, 다시 한번 나는 생성 된 인스턴스마다 속성이 필요하다.Perl 무스 클래스 속성이 아닌 인스턴스 속성 추가
#!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');
인스턴스에서 메소드를 어떻게 만들려고합니까? 클래스 기반 객체 시스템의 맥락에서 그 의미는 무엇입니까? –
까지 내가 알기로 무스 속성은 객체 인스턴스의 해시에 저장되므로 첫 번째 인스턴스에 속성을 추가하면 왜이 속성도 다음에 생성 된 인스턴스에도 존재합니까? 제 질문은 지금 분명합니까? – daliaessam