このコードの実行
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
変更すると、同じように wtf っぽいmyValue2 = -1
出力が得られます。-1 == -3
これは明らかにバグですが、何が原因でしょうか? int
私が理解していないケースステートメントで使用または負の数の微妙なニュアンスはありますか? 私のコードは何か間違っていますか?それとも、単に Flash Builder のバイトコード コンパイラの問題なのでしょうか?