我想返回一个空的数组,而不是一个空的列表。
我有一个返回数组的子项。我希望能够用它来做到这一点:
my $count = scalar getArray();
我是这样做的:
sub getArray {
if ( !isGood() ) {
return ();
} else {
my @array = calculateSomehow();
return @array;
}
}
my $count = scalar getArray();
当 !isGood()
和 $count
变成 undef
而不是 0
时,我大吃一惊!看完perlfaq4 ,我意识到这是因为 getArray() 是在标量上下文中评估的,因此 list ()
被评估为标量,而 scalar( () )
是 undef
,而 my @array;标量 (@array)
为 0。
现在的问题是:如何最优雅地返回一个空的数组,以便$count
为0
if !是好的()
?我只是想出了:
# This is kind of kludgy: Dereference an anonymous array ref. Really?
return @{[]};
或
# I use a temporary variable for this. Really?
my @empty;
return @empty;
是否有任何更简洁/更优雅的方法来返回长度为 0 的数组(空数组)或其他一些制作标量 getArray( )
评估为 0
?
最佳答案
如果您在两种情况下都只返回一个数组,这可能是最清楚的:
sub getArray {
my @array;
@array = calculateSomehow() if isGood();
return @array;
}
但要以最少的方式修改原始代码,请使用 wantarray
。
if (!isGood()) {
return wantarray ? () : 0;
}
关于perl - 如何在 perl 中返回一个空数组/长度为 0 的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36072378/