【发布时间】:2012-04-07 06:15:08
【问题描述】:
在我们的代码中,我有以下内容,现在请忽略//* 位;
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,如果这有影响的话。
【问题讨论】:
-
您是否将此代码复制粘贴到您的项目中?会不会是里面藏着一些奇怪的人物,不小心惹到你了。
-
显然人们不知道Flash的conditional compilation or its syntax。
-
我测试了你的例子(或者至少是它附近的东西——我没有 Flash CS4,只有 Flash Builder),并没有得到任何奇怪的行为。我只能建议尝试在尽可能简单的测试用例中重现该行为,以尝试找到导致此问题的奇怪隐藏事物。
-
我也很困惑为什么上面的方法不起作用,我会尝试用一个简单的例子来复制。似乎@AkashKava 的示例可能是最优雅的解决方案,但我还没有尝试过。
标签: actionscript-3 apache-flex flash-cs4 flashdevelop