私はPerl Mooseを使い慣れていません。この単純な作業を達成しようとしています。私は私のムースクラス「TestObject」が定義されている:Moose:オブジェクト - >ループを介した属性の配列
私は「TestObjects」の配列から直接属性「識別子」にアクセスしようとしている別のスクリプトで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;
:これは「doesnの
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.";
}
仕事。私はこのような回避策を実装することができます:
my @aIdent=();
foreach my $sObject(@aArray1)
{
push(@aIdent,$sObject->Identifier);
}
if([email protected])
{
print "Element with Identifier".$sIdent." found.";
}
しかし、それは最もエレガントな解決策ではないようです。この問題を解決する最も洗練されたソリューションは何ですか?
クラス名を_Object_にしないでください。それは本当に混乱しています! – simbabque
私はsmartmatch operator_を使用していないと言います。これは実験的なもので、ある時点で最終的には変更されたり投げ捨てられたりする可能性があります。 – simbabque