Запуск этого кода
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 is unknown
(Скомпилирован в Flash Builder 4.7.0.349722, работающий на Flash 11.5.502.149. Запуск в Windows 7 с пакетом обновления 1 (SP1), Firefox 18.0.2)
Следующие изменения устраняют эту проблему, обеспечивая правильный вывод:
- Изменение значения типа
Number
. - Удаление операторов отрицательного числа
case
. - Изменение операторов
case
для использованияint
- переменных, а не литералов... если только эти переменные не являютсяconst
, и в этом случае он остается сломаны!
Изменение myValue2 = -1
дает вывод -1 == -3
, который равно равно wtf-ish.
Ясно, что это ошибка, но... что ее вызывает? Есть ли какой-то тонкий нюанс использования int
или отрицательных чисел в case-утверждениях, которые я не понимаю? Мой код как-то не так? Или это просто проблема с байтовым компилятором в Flash Builder?