你能解释一下这个嵌套的条件表达式吗?

时间:2017-07-10 17:27:54

标签: perl conditional-operator

我无法破译这行代码。有人可以将其翻译成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";

3 个答案:

答案 0 :(得分:5)

我认为编写类似于运算符优先级远非明显的代码是不负责任的

使用if / else和条件表达式的混合,它看起来更加清晰

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

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

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

答案 1 :(得分:4)

虽然我还添加了一些内容以使其清晰透明,但是有几个换行符会有所不同。

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

答案 2 :(得分:-1)

这几乎与等效的

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

更严重的是,在真正的分支中嵌套三元运算符令人困惑。我会使用一个明确的if / else。或者,如果我真的想要一个三元组,我会将其重新排列为:

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