一行条件布尔返回语句

时间:2016-02-26 17:36:13

标签: perl return conditional

最近我来到这个Perl代码段:

if($foo eq "foo") {
    return 1;   
}
my $bar = GetBar();
return ($bar eq "bar")

如果$foo的值始终等于foo,则会立即返回true,而不会调用GetBar。假设只有在语句$foo eq "foo"为真时才会发生这种情况,那么就不存在看似如下的oneline条件布尔返回语句:

return only if $foo eq "foo";

含义:仅当$foo eq "foo"为真时才返回$foo eq "foo"的值。

我很好奇是否有任何编码语言的声明。

3 个答案:

答案 0 :(得分:3)

在Perl中,如果所述值为true,则无法返回比较返回的值,但

if ($foo eq 'foo') { return 1; }

可以写成

return 1 if $foo eq 'foo';

与流控制语句类似,语句修饰符记录在perlsyn

顺便说一句,您发布的全部代码可以简化为以下内容:

return $foo eq 'foo' || GetBar() eq 'bar';

答案 1 :(得分:2)

只有当$ foo eq“foo”为真时,才说“$ foo eq的返回值”foo“。

你可以简单地通过

来做到这一点
return 1 if $foo eq 'foo';

如果eq未重载且1是唯一可能的真值。

如果它超载并且可能返回false或1之外的其他内容,则可以执行以下操作:

$_ and return $_ for $foo eq 'foo';

但前提是您的目标是尝试生成错误的代码。

my $foofoo = $foo eq 'foo';
return $foofoo if $foofoo;

会好得多。

答案 2 :(得分:0)

或许像三元运算符(在python中)。

return True if foo == 'foo' else bar == 'bar'