Запуск этого кода
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?