В нашем коде у меня есть следующее, на данный момент, пожалуйста, игнорируйте //*
битов;
if (data["someKey"] != null)//*
{
CONSOLE_OUT.info("Print some stuff.");
TARGET::myTarget
{
var someString:String = data["someKey"] as String;//*
someController.setSoemthing(someString.indexOf("soemthing") > -1 ? true : false);//*
}
}
Я установил в своем FlashCS4 константу компилятора TARGET::myTarget
, установленную на false
, что означает, что код внутри константы компилятора не должен компилироваться. В точке выполнения data["someKey"]
оценивается как null
, что означает, что оператор if НЕ должен выполняться.
Когда я отлаживаю следующий код, выполняются строки с //*
, что является странным поведением. Он пропускает начальную строку после оператора if
и сразу переходит к выполнению кода, который не должен был быть скомпилирован, имея в виду, что он все равно не должен вводить оператор if
. Это почти так, как будто присутствие константы компилятора приводит к тому, что оператор if
выглядит как одна строка, а затем все еще выполняет код в неправильной области видимости.
Однако, если я добавлю оператор else
в конце, код выполнится нормально;
if (data["someKey"] != null)//*
{
CONSOLE_OUT.info("Print some stuff.");
TARGET::myTarget
{
var someString:String = data["someKey"] as String;
someController.setSoemthing(someString.indexOf("soemthing") > -1 ? true : false);
}
}
else
{
CONSOLE_OUT.info("Print some other stuff.");
}
Следует также отметить, что в случае, когда data["someKey"]
оценивает что-то отличное от NULL, вышеприведенная версия правильно пропустит (или не скомпилирует) код в константе.
Я просто хочу выяснить, является ли это ошибкой, или я не использую правильный синтаксис для константы компилятора. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Я дважды проверил константы моего компилятора, я использую Flash CS4 для компиляции и нацеливаюсь на Flash Player 10, если это имеет значение.