Jer*_*emy 2 arrays perl reference
这个问题涉及Perl的可读性和良好实践.我做了一些检查:
如果我有变量$ array_ref,我只需要知道该数组是否至少有一个元素等于文本'match'.$ array_ref可能是未定义的,或者如果定义了$ array_ref,那么它引用的数组是空的(甚至是未定义的?这可能吗?)
我检查标量是否等于1
我检查另一个标量是否等于'是'
这是我正在使用的当前代码:
my $is_compatible = $array_ref and defined grep $_ eq 'match', @{$array_ref}
and $my_num = 1 and $my_text eq 'yes'.
Run Code Online (Sandbox Code Playgroud)
这可以修复到更容易更改和可读吗?此外,它是否适合$ array_ref值的所有可能用例?
从不使用开始and.你想坚持使用它提供的视觉提示的符号运算符.命名为运营商通常发现其中术语被发现,并且and和or通常用于流控制.这两个提示都是错误的,所以你不想给出那些提示.
以下安排非常容易阅读.证据是你使用过的=地方变得非常明显==.
my $is_compatible = ( $array && grep $_ eq 'match', @$array )
&& $my_num == 1
&& $my_text eq 'yes';
Run Code Online (Sandbox Code Playgroud)
如果你想使用sub,以下就足够了.
sub is_compatible {
my ($array, $my_num, $my_text) = @_;
return 0 if !$array || !grep $_ eq 'match', @$array;
return 0 if $my_num != 1;
return 0 if $my_text ne 'yes';
return 1;
}
Run Code Online (Sandbox Code Playgroud)
这两种方法都使类似的东西看起来相似,不同的东西看起来不同,从而实现了极其高效的代码扫