最近我来到这个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"
的值。
我很好奇是否有任何编码语言的声明。
答案 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'