在 Adobe Flex 3 中使用条件编译

赖勇浩(http://laiyonghao.com )译

原文地址: http://bit.ly/3UpSWP

———————————————–

在编译应用时传递常量给mxmlc编译器就能够使用条件编译——在构建时包含或排除的某些代码块。 最常见的是通过一个布尔值来包含或排除一段调试或检测代码。 如下面的例子就是一段使用内置布尔常量实现条件化的代码:

CONFIG::debugging{ //执行调试代码。

}

这样就能够使用compiler.define 编译选项了。 常量可以是一个布尔、字符串、或数值、或表达式(在编译时对 ActionScript 求值)。 这种常量可以在应用的源代码中作为一个全局常量访问。

使用define 选项,可以为常量定义一个命名空间,相应的变量名和数值使用下面的语法:

-define = namespace::variable_name,value

命名空间可以任意配置。 下面的例子在CONFIG名字空间里定义了常量debugging ,它的值为true 

-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 任务中,也可以用一个define 元素来定义常量,如下:

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

使用内置常量

可以 ActionScript 代码中使用内置常量。 布尔值可以用来条件化顶层函数定义、类和变量,与 C/C++ 上使用#IFDEF 预处理指令的方式大致相同, 但不能使用布尔常量条件化元数据或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); } } }

也可以传递字符串和数值到应用中去,把它们当作内置常量来使用,就像在 C/C++ 中使用#define 宏指令一样。例如,传递一个名为NAMES::Company 的值,能够替代如下的 ActionScript 语句来定义常量:

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"

一般来说,应该为常数加上双引号,以确保mxmlc编译器正确地将它们作为一个单独的参数。

传递字符串

当传递字符串,您必须使用双引号,编译器才能够正确地处理它们。

在命令行定义字符串,则必须使用用双引号,对于原来就需要的双引号,需要转义("/"Adobe Systems/"" "/'Adobe Systems/'")或改用单引号("'Adobe Systems'"

下面的例子是在命令行传递字符串两种方法:

-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,"''" 

在配置文件传递空字符串,用双引号("" )或单引号('')即可 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值