在AS3中,您可以将常量传递给编译器
-define+=CONFIG::DEBUG,true并将其用于条件编译,如下所示:
CONFIG::DEBUG {
trace("This only gets compiled when debug is true.");
}我正在寻找像#ifndef这样的东西,这样我就可以否定debug的值,并使用它来有条件地添加发布代码。到目前为止,我找到的唯一解决方案是在adobe的conditional compilation documentation中,因为我的调试和发布配置是相互排斥的,所以我不喜欢同时拥有调试和发布常量的想法。
此外,这种格式可以工作,但我假设它在运行时运行检查,这不是我想要的:
if (CONFIG::DEBUG) {
//debug stuff
}
else {
//release stuff
}我也考虑过这样做,但它仍然不是我所希望的优雅的解决方案:
-define+=CONFIG::DEBUG,true -define+=CONFIG::RELEASE,!CONFIG::DEBUG提前感谢:)
发布于 2010-04-29 19:49:52
使用if / else结构:死代码将被编译器移除,并且不会在运行时进行测试。您的swf中将只有一个版本的代码。
如果您不确定,请使用反编译器或转储工具来查看实际发生的情况。
http://apparat.googlecode.com/files/dump.zip
http://www.swftools.org/
..。
发布于 2010-11-01 23:25:37
这样做可以很好地工作,并且会去掉不能运行的代码:
if (CONFIG::DEBUG) {
//debug stuff
}
else {
//release stuff
}但这将在运行时求值:
if (!CONFIG::DEBUG) {
//release stuff
}
else {
//debug stuff
}mxmlc显然只能计算文字布尔值,而不能计算任何类型的表达式,包括简单的not。
发布于 2012-06-28 06:18:48
虽然Patrick的答案满足问题的标准,但它并不涵盖所有用例。如果您所在的代码区域允许使用if/else语句,那么这是一个很好的答案。但是如果你在一个你不能做到的地方,那么你将需要一个更好的解决方案。例如,您可能希望这样做,以便在类中声明一个常量:
private var server:String = "http://localhost/mystagingenvironment";或者对于一个实时发布:
private var server:String = "http://productionserver.com";(这只是一个例子,我并不提倡将其作为生产代码)。
我使用loadConfig+=并使用loadConfig+="myconfig.xml“进行配置,而不是传递大量的命令行参数。因此,在xml配置的<compiler>部分:
<define>
<name>CONFIG::debug</name>
<value>false</value>
</define>
<define>
<name>CONFIG::release</name>
<value>!CONFIG::debug</value>
</define>这对于所有用例都很有效:
CONFIG::debug
{
private var server:String = "http://localhost/mystagingenvironment";
}
CONFIG::release
{
private var server:String = "http://productionserver.com";
}这有一个额外的好处,即跨应用程序一致地工作。它也不依赖于'optimize‘标志为真,就像帕特里克的答案一样(尽管我认为我们可以假设99.999999%的swfs都有optimize=true,但我只在优化器破坏我的AS3时才将其设置为false )。
它确实有一个缺点,那就是它不会编译所有的代码路径,只编译包含的那些代码路径。因此,如果你没有使用构建服务器来创建发布构建,并在事情崩溃的时候告诉你,那么在你进行发布构建时,要为意外的错误做好准备(“但是它是在debug中编译的!废话,我需要现在就启动它!”)。
https://stackoverflow.com/questions/2736411
复制相似问题