Je suis nouveau à Perl Moose, et j'essaie d'accomplir cette tâche simple. J'ai ma classe Moose « TestObject » définis:Moose: Array of Objects-> loop through Attribut
package TestObject;
use Moose;
use namespace::autoclean;
has 'Identifier' => (is =>'ro',isa=>'Str');
around BUILDARGS => sub
{
my $orig = shift;
my $class = shift;
if (@_ == 1 && ! ref $_[0]) {
return $class->$orig(Identifier => $_[0]);
}
else {
return $class->$orig(@_);
}
};
__PACKAGE__->meta->make_immutable;
1;
Dans un autre script que je suis en train d'accéder à l'attribut « Identifier » directement à partir d'un tableau de « TestObjects »:
use TestObject;
use experimental 'smartmatch';
my @aArray1=(TestObject->new("z003"),TestObject->new("t302"),TestObject->new("r002"));
my $sIdent="t302";
if([email protected]>Identifier)
{
print "Element with Identifier".$sIdent." found.";
}
Ce n » t travail. Je pourrais mettre en œuvre une solution de contournement comme ceci:
my @aIdent=();
foreach my $sObject(@aArray1)
{
push(@aIdent,$sObject->Identifier);
}
if([email protected])
{
print "Element with Identifier".$sIdent." found.";
}
mais cela ne semble pas être la solution la plus élégante. Quelle est la solution la plus élégante pour résoudre ce problème?
Ne nommez pas votre classe _Object_. C'est vraiment déroutant! – simbabque
Je dirais que je n'utilise pas l'opérateur smartmatch. C'est expérimental et peut changer ou être rejeté finalement à un moment donné. – simbabque