1
我有一個名爲aTestCaseList
的數組,它被初始化並填充了類型爲「Testcase」的(Moose)對象。正如所料,我可以打印出aTestCaseList
中每個Testcase
對象的屬性TestName
。但是,當我試圖找到名爲「TEST4」列表中的第一個對象使用https://perldoc.perl.org/List/Util.html#first我收到以下錯誤首先在一個駝鹿對象的數組上使用List :: Util
不能調用方法「測試名」未定義的值
爲什麼是數組中的對象突然未定義?
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;
是的,你是對的。我想我誤解了錯誤信息。我由於某種原因認爲對象本身是未定義的。 – airborne
沒有'first'的聲明,'first {$ _-> TestName eq $ sTestcase} @ aTestcaseList'被解釋爲'(do {$ _-> TestName eq $ sTestcase}) - > first(@aTestcaseList)間接方法調用。 '$ _'未定義,所以'$ _-> TestName'拋出該錯誤。 – ikegami