你能解释一下这个嵌套的条件表达式吗?
Can you explain this nested conditional expression?
我无法破译这行代码。有人可以将其翻译成 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";
虽然我还添加了一些括号以使其更清晰,但几个换行符就大不一样了。
$type = $self->{1}{_flag} & 2
? ( $self->{2}{_flag} & 2 ? "A" : "B" )
: ( $self->{2}{_flag} & 2 ? "B" : "C" );
我认为在运算符优先级远非显而易见的情况下编写这样的代码是不负责任的
混合使用 if
/ else
和条件表达式看起来更清晰
if ( $self->{1}{_flag} & 2 ) {
$type = $self->{2}{_flag} & 2 ? "A" : "B";
}
else {
$type = $self->{2}{_flag} & 2 ? "B" : "C";
}
这几乎和等价物一样神秘
$type = (qw/C x B x A/)[ $self->{1}{_flag} & 2 + $self->{2}{_flag} & 2 ];
更严重的是,在 true 分支中嵌套三元运算符令人困惑。我会使用明确的 if/else。或者,如果我真的想要一个三元组,我会将其重新排列为:
$type = $self->{1}{_flag} & 2 != $self->{2}{_flag} & 2
? 'B'
: $self->{1}{_flag} & 2
? 'A'
: 'C';
我无法破译这行代码。有人可以将其翻译成 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";
虽然我还添加了一些括号以使其更清晰,但几个换行符就大不一样了。
$type = $self->{1}{_flag} & 2
? ( $self->{2}{_flag} & 2 ? "A" : "B" )
: ( $self->{2}{_flag} & 2 ? "B" : "C" );
我认为在运算符优先级远非显而易见的情况下编写这样的代码是不负责任的
混合使用 if
/ else
和条件表达式看起来更清晰
if ( $self->{1}{_flag} & 2 ) {
$type = $self->{2}{_flag} & 2 ? "A" : "B";
}
else {
$type = $self->{2}{_flag} & 2 ? "B" : "C";
}
这几乎和等价物一样神秘
$type = (qw/C x B x A/)[ $self->{1}{_flag} & 2 + $self->{2}{_flag} & 2 ];
更严重的是,在 true 分支中嵌套三元运算符令人困惑。我会使用明确的 if/else。或者,如果我真的想要一个三元组,我会将其重新排列为:
$type = $self->{1}{_flag} & 2 != $self->{2}{_flag} & 2
? 'B'
: $self->{1}{_flag} & 2
? 'A'
: 'C';