2016-02-26 73 views
-5

最近我来到这个Perl代码段:一号线条件布尔return语句

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

如果$foo值是有史以来等于foo,它会立即返回true,而不调用GetBar。假设只要语句$foo eq "foo"是真实的,这将只发生,是不是有一个看起来像ONELINE条件布尔return语句:

return only if $foo eq "foo"; 

含义:$foo eq "foo"只有返回值$foo eq "foo"是真实的。

我很好奇在任何编码语言中是否有这样的陈述。

+4

哪种语言? –

+0

你真正的问题是什么?可以'如果(EXPR){返回EXPR; }'写成'return EXPR if EXPR;'in Perl?如果是这样,答案是肯定的。 – ThisSuitIsBlackNot

+0

不幸的是评论必须超过3个字符,所以我添加了这个句子。没有! – Olaf

回答

3

在Perl中,你不能返回的,如果说值是true比较返回的值,但

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

可以写成

return 1 if $foo eq 'foo'; 

像流控制语句,语句修饰符记录在perlsyn中。


顺便说一句,你发布可以简化为以下代码的全部:富“只有$ foo的EQ‘

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

可爱,这接近我想要的。感谢简化例子,我们不会这么想。 –

+1

我会避免简化。将子调用放在单独的语句中以便于调试可能会很好。从这个角度来看,问题中的原始代码是完美的。 – ysth

+0

@ysth,添加调试钩子为时过早。绝对没有迹象表明任何需要。 – ikegami

0

可能类似三元运算符(在Python中)。

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

我对Perl有更多的经验,但现在我也在编写很多Python,因此我错过了Python IF的TrueValue-IfCondition-FalseValue语法。 ($ cond?$ trueValue:$ falseValue)可以减少可读性。问:是否有Perl语言允许Python命令? –

+0

^你是指三元经营者?在Perl中:'我的$ value = $ cond? $ value_if_true:$ value_if_false;'或'return $ cond? $ value_if_true:$ value_if_false;' – plusplus

2

你说’的$ foo的EQ返回值” foo“是真的。”

你可以做到这一点只需

return 1 if $foo eq 'foo'; 

如果eq没有超载和1是唯一可能的真正价值。

如果超载并可能返回其他的东西比虚假或1,你可以这样做:

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

,但只有当你的目标是设法产生不好的代码。

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

会好很多。