运行这段代码
var myValue1:int = 2;
switch (myValue1)
{
case -3: trace(myValue1 + " == -3"); break;
case -2: trace(myValue1 + " == -2"); break;
case -1: trace(myValue1 + " == -1"); break;
case 0: trace(myValue1 + " == 0"); break;
case 1: trace(myValue1 + " == 1"); break;
case 2: trace(myValue1 + " == 2"); break;
case 3: trace(myValue1 + " == 3"); break;
default: trace(myValue1 + " is unknown"); break;
}
var myValue2:int = -2;
switch (myValue2)
{
case -3: trace(myValue2 + " == -3"); break;
case -2: trace(myValue2 + " == -2"); break;
case -1: trace(myValue2 + " == -1"); break;
case 0: trace(myValue2 + " == 0"); break;
case 1: trace(myValue2 + " == 1"); break;
case 2: trace(myValue2 + " == 2"); break;
case 3: trace(myValue2 + " == 3"); break;
default: trace(myValue2 + " is unknown"); break;
}
输出结果如下:
2 == 0 -2是未知的
(编译于Flash Builder 4.7.0.349722,运行于Flash 11.5.502.149。运行于Windows 7 SP1,Firefox 18.0.2)
以下更改都可以修复上述问题,给出正确的输出:
- 将值类型更改为
Number
。 - 删除负数
case
语句。 - 将
case
语句更改为使用int
变量而不是字面常量...除非这些变量也是const
,否则它仍然无法正常工作!
将myValue2 = -1
更改为myValue2 = -3
将会得到输出-1 == -3
,同样让人困惑。
显然这是一个bug,但是......是什么导致了它?是否有一些微妙的细节,在使用int
或负数case
语句时我没有理解?我的代码是否有问题?还是这只是Flash Builder中的字节码编译器问题?
switch (true) { case someBooleanExpression: break; case someOtherExpression: break; }
我认为这种行为的答案在于某些东西被强制转换/被视为布尔值。但我不能给出明确的答案,我相信其他人会的 :) - Sunil D.2 == 2
和-2 == -2
。 - david.emilsson2 == 2
和-2 == -2
MiniBuilder2 == 2
和-2 == -2
wonderfl.net2 == 2
和-2 == -2
- khailcs