如果控制else与之相关,如何控制?
例如:
if X = 1 { // A
if Y > 1 { // B
gothere();
}
}
else if X < 1 { // C
gohere();
}
else { // D
gonowhere();
}
如何确保C和D与B ???
无关这是另一个例子:
if xxx {
...
FM_log(7,"vList.length = "+vList.length);
if (skippingAvancado)
if (vList.length > 1)
changeVillage();
else {
if (skipcounter >= maxSkipCount) {
FM_log(7,"ROTINA ANTIGA SKIPCOUNTER");
changeVillage();
}
}
else {
答案 0 :(得分:1)
这是dangling else问题;它是模糊的,语言可以选择要绑定的构造。大多数(如果不是全部)语言将else与最近的if组合在一起,所以它将是
if(foo)
if(bar)
baz;
else
bazz;
在实践中,您应该始终使用大括号来确保没有歧义,就像您在第一个示例中所做的那样。如果你从第一个例子中取出括号,C和D将被附加到B而不是A;因为你包含它们,所以块可以按你的需要工作
答案 1 :(得分:0)
只要在外部if
语句周围放置括号,就可以保证内部if
与外部else
无关:
if (X == 1) { // A
if (Y > 1) { // B
gothere();
}
}
在你的第二个例子中,我会在第一个if
周围添加括号,以保证其内部if
的范围正确:
if (skippingAvancado) {
if (vList.length > 1)
changeVillage();
}
答案 2 :(得分:0)
这是一个简单的逻辑,如果......你通过使用正确的括号和嵌套来控制它。
答案 3 :(得分:0)
在您的第一个示例中,C和D与B无关 - 它们是第一个else
(A)的if
个。这是由括号确保的。在第二个示例中,else
可能对应于 second if
(else
子句与最近的if
匹配),因此你应该添加大括号
if (vList.length > 1)
changeVillage();
确保所需的行为。
答案 4 :(得分:0)
由于听起来你还没有完全控制if/else
构造的工作方式,无论是否有块语句,我都提出以下建议:
{/*...*/}
中。这将确保正确地将多个语句组合在一起{
时都会增加缩进,每次写}
都会减少缩进。像这样:
| | | |
if (foo){ // if1
if (bar){ //if2
...
} else if (foobar) { //elseif if2
if (foobarfoo) { //if3
...
} // end if3
} // end if2
} else { //else if1
...
} // end if1
| | | |
如果某些浏览器无法正确地对您的语句进行分组,则会导致错误的分组,从而导致您无法进行调试。