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