2017-07-10 9 views
1

このコード行は解読できません。誰かがif/else声明に翻訳してください。この入れ子になった条件式を説明できますか?

私は基本的なCONDITION ? VALUE_IF_TRUE : VALUE_IF_FALSEパターンを理解していますが、この行はそれを破るようです。

$type = $self->{1}{_flag} & 2 ? 
    $self->{2}{_flag} & 2 ? "A" : "B" : 
    $self->{2}{_flag} & 2 ? "B" : "C"; 

答えて

4

いくつかの改行がありますが、私はそれを明確にするためにいくつかの括弧も追加しました。

$type = $self->{1}{_flag} & 2 
    ? ($self->{2}{_flag} & 2 ? "A" : "B") 
    : ($self->{2}{_flag} & 2 ? "B" : "C"); 
+0

{2} {_flag}は&2ではありませんか? – IMPERATOR

+0

そうです。 。 – ikegami

5

私は演算子の優先順位は、それがこの

if ($self->{1}{_flag} & 2) { 

    $type = $self->{2}{_flag} & 2 ? "A" : "B"; 
} 
else { 

    $type = $self->{2}{_flag} & 2 ? "B" : "C"; 
} 
+0

PHPを使用しない限り、三項演算子の優先順位は十分です(http://phpsadness.com/sad/30) – mob

-1
のようなより明確に見える if/ elseの混合物と条件式を使用して明らか

はほど遠いところ、それはそのようなコードを書くために無責任だと思います

これは、同等のものとほぼ同じくらい暗黙的です。

$type = (qw/C x B x A/)[ $self->{1}{_flag} & 2 + $self->{2}{_flag} & 2 ]; 

さらに真剣に、真のブランチ内のネストしている三項演算子は混乱します。明示的なif/elseを使用します。私は本当に三元を望んでいた場合は、私がこれを再配置したい:{1} {_フラグは}ない&2であるとするとき私が間違っている場合は、ケース「C」があるので、私を修正

$type = $self->{1}{_flag} & 2 != $self->{2}{_flag} & 2 
    ? 'B' 
    : $self->{1}{_flag} & 2 
     ? 'A' 
     : 'C'; 
+1

これは質問に対する実際の回答ではありません。私はこのスキルのレベルのPerlユーザーがあなたの(間違いなく)潜在的な同等物を全く理解しないことを疑う。 –

+0

あなたの答えに説明を加えてください。 –

関連する問題