2016-02-26 70 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; 

會好很多。