gpt4 book ai didi

actionscript-3 - 这是 AS3 条件编译的错误吗?

转载 作者:行者123 更新时间:2023-12-02 05:19:04 24 4
gpt4 key购买 nike

在我们的代码中我有以下内容,现在请忽略 //* 位;

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 为目标(如果这有所不同)。

最佳答案

这不是错误,编译器会去除任何 if(false) 语句,因此您的条件常量必须包含在条件评估中。

if (data["someKey"] != null)//*
{
    CONSOLE_OUT.info("Print some stuff.");
    if(TARGET::myTarget) // it should be conditional statement
    {
        var someString:String = data["someKey"] as String;//*
        someController.setSoemthing(someString.indexOf("soemthing") > -1 ? true : false);//*
    }
}

如果你看flex sample,他们在方法声明之外应用了符号,所以当你在成员体之外写条件编译符号时,成员体被包含/排除,但是在inline语句的情况下,flex无法确定什么排除,所以应该在if的条件下使用。

在这里查看答案和链接,

Flash/Flex conditional compilation "else"

关于actionscript-3 - 这是 AS3 条件编译的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com