in reply to Re: OO Pattern Container x Elements and Method Chaining
in thread OO Pattern Container x Elements and Method Chaining
Thanks a lot
> You should probably make some of the slots weak.
of course, but ...
I hope this makes it clearer now:
#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; { package Element; use Moo; has name => (is => 'ro'); has active_container => (is => 'rw'); } { package Container; use Moo; has elements => (is => 'ro', default => sub { [] }); sub add_elem { my ($self, $element) = @_; push @{ $self->elements }, $element unless grep $_ == $element, @{ $self->elements }; } sub get_elem { my ($self, $name) = @_; my $elem = (grep $_->name eq $name, @{ $self->elements })[0]; $elem->active_container($self); return $elem } } my $elem0 = 'Element'->new(name => 'one'); my ($cont1, $cont2) = map 'Container'->new, 1, 2; $cont1->add_elem($elem0); $cont2->add_elem($elem0); my $elem1 = $cont1->get_elem('one'); say "OK" if $elem1->active_container == $cont1; my $elem2 = $cont2->get_elem('one'); say "OK" if $elem2->active_container == $cont2; print "Not OK" if $elem1->active_container != $cont1;
C:/Strawberry/perl/bin\perl.exe -w d:/tmp/pm/container_elem.pl OK OK Not OK Compilation finished at Fri Oct 8 17:48:07
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
In Section
Seekers of Perl Wisdom