【发布时间】:2017-09-08 19:50:34
【问题描述】:
我是 Perl Moose 的新手,我正在努力完成这个简单的任务。我定义了我的 Moose 类“TestObject”:
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;
在另一个脚本中,我试图直接从“TestObjects”数组中访问属性“Identifier”:
use TestObject;
use experimental 'smartmatch';
my @aArray1=(TestObject->new("z003"),TestObject->new("t302"),TestObject->new("r002"));
my $sIdent="t302";
if($sIdent~~@aArray1->Identifier)
{
print "Element with Identifier".$sIdent." found.";
}
这不起作用。我可以实现这样的解决方法:
my @aIdent=();
foreach my $sObject(@aArray1)
{
push(@aIdent,$sObject->Identifier);
}
if($sIdent~~@aIdent)
{
print "Element with Identifier".$sIdent." found.";
}
但这似乎不是最优雅的解决方案。解决这个问题的最优雅的解决方案是什么?
【问题讨论】:
-
不要将你的类命名为 Object。这真是令人困惑!
-
我会说不要使用智能匹配运算符。它是实验性的,最终可能会改变或被淘汰。
标签: arrays perl attributes moose