转:http://www.lite3.cn/blog/?p=404&cpage=1

知道C/C++ 有条件编译,一直想着AS要是也有条件编译就好了,今天搜了半天Google,终于让我找到了 
下面翻译livedocs.adobe.com上一篇文章,英文不怎么好,有些是Google翻译的,然后我再纠正下语句,大家不要见怪。 

想要包含或排除某些代码块,你可以使用条件编译。mxmlc编译器允许你在编译时传递常量值到应用程序。通常,您传递一个布尔值用于包含或排除调试代码。下面的例子通过使用一个Boolean常量内联代码块:

CONFIG::debugging {
    // Execute debugging code here.
}

你可以使用compiler.define编译器选项传递一些常量。这些常量可以是一个Boolean,String,Number或表达式。然后,这些常量可以在应用程序的源代码中作为全局常量访问。
要使用difine选项,可定义一个命名空间配置常量,变量名和值使用以下语法:

-define=namespace::variable_name,value

可以定义任何你想使用是命名空间,下面是示例定义一个debugging 为true的常量在CONFIG命名空间。

-define=CONFIG::debugging,true

可以定义多个常量在同一个命令行里,用多个define隔开,例如:

mxmlc -define=CONFIG::debugging,true -define=CONFIG::release,false MyApp.mxml

也可以在flex-config.xml 文件里定义这些常量,而不必在命令行里定义,你可以这样写:


<compiler>
    <define>
        <name>CONFIG::debugging</name>
        <value>true</value>
    </define>
    <define>
        <name>CONFIG::release</name>
        <value>false</value>
    </define>
</compiler>

在Flex Ant里 可以设置这些常量作为元素定义,类似下面的示例:

<mxmlc ... >
    <define name="CONFIG::debugging" value="true"/>
    <define name="CONFIG::release" value="false"/>
</mxmlc>

使用内置常量
你可以内联ActionScript常量,以一个Boolean常量为条件编译顶级函数,类,变量定义,在C/C++里通常使用#IFDEF 预处理命名。不能使用Boolean常量来条件编译metadata 或 import 语句。
下面的示例来条件编译一个类定义。


代码
// compilers/MyButton.as
package
{
    import mx.controls.Button;
 
    CONFIG::debugging
    public class MyButton extends Button
    {    
        public function MyButton()
        {
            super();
            // Set the label text to blue.
            setStyle("color", 0x0000FF);
        }
    }
 
    CONFIG::release
    public class MyButton extends Button
    {    
        public function MyButton()
        {
            super();
            // Set the label text to red.
            setStyle("color", 0xFF0000);
        }
    }
}
你也可能传递一个String或Number到程序并当做内置常量使用它们,或许你使用#define指令在C/C++中。例如你传递一个名叫 NAMES::Company的常量,你可以替换作为一个常量在程序中使用:
private static const companyName:String = NAMES::Company;

传递表达式:
你也可以传递一个能在编译时获得值的表达式,下面的示例结果为false。

-define+=CONFIG::myConst,"1 > 2"

下面是示例结果为3。

-define+=CONFIG::myConst,"4 - 1"

表达式可包含常量或其他配置值:

-define+=CONFIG::bool2,false -define+=CONFIG::and1,"CONFIG::bool2 && false"

一般情况下你应该把String 用引号包含,以便告诉编译器它们是一个单独的参数。
传递String
当传递字符串,您必须添加额外的引号,以确保他们正确地编译器解析。
定义命令行字符串时,你必须使用双引号,如果本身就是双引号,则使用转义字符\" 或者单引号。
下面的示例演示了命令行里使用字符串的方法:

-define+=NAMES::Company,"'Adobe Systems'" -define+=NAMES::Ticker,"\"ADBE\""

在配置文件里定义字符串,你必须用双引号或单引号包含字符串:


<define>
    <name>NAMES::Company</name>
    <value>'Adobe Systems'</value>
</define>
<define>
    <name>NAMES::Ticker</name>
    <value>"ADBE"</value>
</define>

在命令行传递一个空字符串,则必须用双引号包含单引号。

-define+=CONFIG::debugging,"''"

在配置文件里传递一个空字符串,则可以用单引号或双引号,都OK的

------------------------------------------------------------------------------------------------------
呵呵终于翻译完了,其实条件编译也可以在FD 和 Flash CS4里配置的。

在Flash CS4 里设置:(Ctrl+Shift+F12) 调出发布设置 ==> Flash选项卡 ==> AS脚本设置,调出 高级ActionScript3.0设置 ==> 选择配置常数选项卡 ==> 添加自己喜欢的预定义常量 格式为 namespace::variable_name ,然后后面是常量值。

在FD里设置:Project菜单 ==> properties...子菜单,调出Properties窗口 ==> 选择Compiler Options选项卡 ==> 选择Advanced选单里的Advanced Compiler Options ==> 点右边的 ... 按钮,调出输入窗口==> 输入编译选项就ok了。

AS3 条件编译的更多相关文章

  1. AS3条件编译

    package { import flash.display.Sprite; public class Main extends Sprite { public function Main() { s ...

  2. as3 中trace() 函数对效率的影响

    进行页游开发的过程中,很多开发者都有一个习惯,在数据输出中添加trace()函数来跟踪数值 - 不进行条件编译,发布的时候也不删除.实际上大量的trace函数会降低程序的效率,我们可以用一个简单的例子 ...

  3. [AIR] as3 之条件编译多平台妙用

    http://bbs.9ria.com/thread-418864-1-1.html 一直希望as3 可以支持条件编译,即满足A时编译函数1,满足B时则编译函数2. 最佳百度了之后,发现原来是可以实现 ...

  4. C# 条件编译

    本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...

  5. C#-#define条件编译

    本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...

  6. 条件编译#if

    1.为什么需要条件编译 客户的需求在不停地发生变化,一会儿需要这个功能,一会儿不需要这个功能.我们可以使用条件编译来方便地裁剪功能. 2.条件编译语句#if 条件编译语句#if的形式是 #if exp ...

  7. 条件编译#if #ifdef

    近期由于一些莫名其妙的原因开始学c++,我觉得我哪天要是挂了也是被自己给折腾死的,算了,反正不是折腾死就是被淘汰,当是没事打发时间了,废话不多说,开始今天的主题. 之前接触的注释就是注释,条件语句就是 ...

  8. [转]关于AS3 Socket和TCP不得不说的三两事

    磨刀不误砍柴工,让我们从概念入手,逐步深入. 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络 ...

  9. as3正则表达式

    1.新建正则表达式,有两种方式var exp1:RegExp = new RegExp("ABCD","g");var exp2 = /ABCD/g;//g g ...

随机推荐

  1. 8、双向一对多的关联关系(等同于双向多对一。1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用)

    双向一对多关联关系 “双向一对多关联关系”等同于“双向多对一关联关系”:1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用. 还是用客户Customer和订单Order来解释: “一对多 ...

  2. (一)CSS三种插入方式

    CSS概述 CSS(Cascading Style Sheets)指层叠样式表,样式定义了如何显示HTML元素. 样式通常存储在样式表中,样式与HTML分离解决了内容与表现分离的问题. 多个样式表可以 ...

  3. SQL server函数大全

    函数类别 作用 聚合函数 执行的操作是将多个值合并为一个值.例如 COUNT.SUM.MIN 和MAX. 配置函数 是一种标量函数,可返回有关配置设置的信息. 转换函数 将值从一种数据类型转换为另一种 ...

  4. Android自动化测试之Monkeyrunner从零开始(三)

    转自http://www.51testing.com/html/81/22381-854342.html 时光过得太快了,一晃离上一篇monkeyrunner系列的博客已经一年多了.这一年多时间经历了 ...

  5. ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)

    1 imageView.setScaleType(ImageView.ScaleType.FIT_XY ); 1 这里我们重点理解ImageView的属性android:scaleType,即Imag ...

  6. 制作SM2证书

    前段时间将系统的RSA算法全部升级为SM2国密算法,密码机和UKey硬件设备大都同时支持RSA和SM2算法,只是应用系统的加解密签名验证需要修改,这个更改底层调用的加密动态库来,原来RSA用的对称加密 ...

  7. MyBatis 实践 -动态SQL/关联查询

    MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...

  8. 设置mysql的interactive_timeout和wait_timeout的值

    1,为什么要重新设置这两个变量的值? 因为如果数据库默认这两个变量的值是8小时(即28800秒)如果在8小时之内没有连接到数据库,等下次再连的时候就会抛连接超时,或连接关闭这样的异 常,但是多连接几次 ...

  9. bzoj2005: [Noi2010]能量采集

    lsj师兄的题解 一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) *  2 - 1. 设g(i)为 gcd(x, y) = i ( 1 < ...

  10. Fatal NI connect error 12170

    Fatal NI connect error 12170 转载:http://www.xifenfei.com/1812.html 今天在一台服务器的日志文件中,发现如下信息: Fatal NI co ...