首先在 Moose 对象数组上使用 List::Util
Using List::Util first on an array of Moose objects
我有一个名为 aTestCaseList
的数组,它被初始化并填充了 "Testcase" 类型的 (Moose) 对象。正如预期的那样,我可以打印出 aTestCaseList
中每个 Testcase
对象的属性 TestName
。但是,当我尝试使用 https://perldoc.perl.org/List/Util.html#first 在名为 "Test4" 的列表中找到第一个对象时,出现以下错误
Can't call method "TestName" on an undefined value
为什么数组中的对象突然未定义?
use Testcase;
my @aTestcaseList=();
for (my $i=1; $i <= 9; $i++) {
push(@aTestcaseList,Testcase->new("Test".$i));
}
my $sTestcase="Test4";
foreach my $sTestDummy(@aTestcaseList)
{
#Works as expected and prints: Test1 Test2 Test3 ... Test9
print $sTestDummy->TestName." ";
}
# throws the error:
my $sFindTest=first {$_->TestName eq $sTestcase} @aTestcaseList;
package Testcase;
use Moose;
use namespace::autoclean;
has 'TestName' => (is =>'ro',isa=>'Str');
around BUILDARGS => sub
{
my $orig = shift;
my $class = shift;
if ( @_ == 1 && ! ref $_[0] ) {
return $class->$orig(TestName => $_[0]);
}
else {
return $class->$orig(@_);
}
};
__PACKAGE__->meta->make_immutable;
1;
您忘记从 List::Util
导入函数 first
就像
use List::Util qw(first);
我有一个名为 aTestCaseList
的数组,它被初始化并填充了 "Testcase" 类型的 (Moose) 对象。正如预期的那样,我可以打印出 aTestCaseList
中每个 Testcase
对象的属性 TestName
。但是,当我尝试使用 https://perldoc.perl.org/List/Util.html#first 在名为 "Test4" 的列表中找到第一个对象时,出现以下错误
Can't call method "TestName" on an undefined value
为什么数组中的对象突然未定义?
use Testcase;
my @aTestcaseList=();
for (my $i=1; $i <= 9; $i++) {
push(@aTestcaseList,Testcase->new("Test".$i));
}
my $sTestcase="Test4";
foreach my $sTestDummy(@aTestcaseList)
{
#Works as expected and prints: Test1 Test2 Test3 ... Test9
print $sTestDummy->TestName." ";
}
# throws the error:
my $sFindTest=first {$_->TestName eq $sTestcase} @aTestcaseList;
package Testcase;
use Moose;
use namespace::autoclean;
has 'TestName' => (is =>'ro',isa=>'Str');
around BUILDARGS => sub
{
my $orig = shift;
my $class = shift;
if ( @_ == 1 && ! ref $_[0] ) {
return $class->$orig(TestName => $_[0]);
}
else {
return $class->$orig(@_);
}
};
__PACKAGE__->meta->make_immutable;
1;
您忘记从 List::Util
导入函数 first
就像
use List::Util qw(first);