`

AS3 条件编译

阅读更多

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

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

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

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->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 文件里定义这些常量,而不必在命令行里定义,你可以这样写:

复制代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><compiler>
<define>
<name>CONFIG::debugging</name>
<value>true</value>
</define>
<define>
<name>CONFIG::release</name>
<value>false</value>
</define>
</compiler>
复制代码

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

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><mxmlc ... >
<define name="CONFIG::debugging" value="true"/>
<define name="CONFIG::release" value="false"/>
</mxmlc>

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

复制代码
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->// compilers/MyButton.as
package
{
import mx.controls.Button;

CONFIG::debugging
publicclass MyButton extends Button
{
public function MyButton()
{
super();
// Set the label text to blue.
setStyle("color", 0x0000FF);
}
}

CONFIG::release
publicclass 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\""

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

复制代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><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 条件编译
在Flash CS4 里设置:(Ctrl+Shift+F12) 调出发布设置 ==> Flash选项卡 ==> AS脚本设置,调出 高级ActionScript3.0设置 ==> 选择配置常数选项卡 ==> 添加自己喜欢的预定义常量 格式为 namespace::variable_name ,然后后面是常量值。
FD条件编译
在FD里设置:Project菜单 ==> properties...子菜单,调出Properties窗口 ==> 选择Compiler Options选项卡 ==> 选择Advanced选单里的Advanced Compiler Options ==> 点右边的 ... 按钮,调出输入窗口==> 输入编译选项就ok了。

分享到:
评论

相关推荐

    ASP.NET 2.0下的条件编译

    我一般会在Solution中新增一个用于测试用的配置,在其中增加一个“Test”之类的编译指令,然后在代码中,把一些测试条件,测试方法放到这个指令下。在开发团队还没有引进单元测试之类的概念的时候,我可不想用新增一...

    IE中jscript/javascript的条件编译

    IE中jscript/javascript的条件编译 作者:JavaScript Kit 译者:子乌(Sheneyan) 翻译日期:2006-02-12 英文原文:Conditional Compilation of JScript/ JavaScript in IE 版权:翻译未经过javascript kit同意,我只对我所...

    AS400 RLU编程wrod版

    2.1 从AS/400主菜单启动RLU 2.2 从PDM启动RLU 2.3 启动RLU的命令(STRRLU) 第三章 设计一个报表 3.1 使用顺序行命令的规则 3.2 使用命令行命令的规则 3.3 使用CL命令的规则 3.4 修改编辑对话环境 SET命令 3.5 定位...

    提高C#编程水平的50个要点

    4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 6.区别值类型和引用类型 7.使用不可变的值类型(Immutable Atomic Value Types) 8.在值类型中,确保0是一个...

    解析C语言与C++的编译模型

    限于当时的硬件条件,C编译器不能够在内存里一次性地装载所有程序代码,而需要将代码分为多个源文件,并且分别编译。并且由于内存限制,编译器本身也不能太大,因此需要分为多个可执行文件,进行分阶段的编译。在...

    调高C#编程的50个基本技巧

    使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 6.区别值类型和引用类型 7.使用不可变的值类型(Immutable Atomic Value Types) 8.在值类型中,确保0是...

    g3log:G3log是一种异步的,“崩溃安全”的记录器,可以与默认的记录接收器一起轻松使用,也可以添加自己的记录器。 G3log由纯C ++ 14(从C ++ 11支持到1.3.2发行版)组成,没有任何外部库(用于单元测试的gtest除外)。 G3log是跨平台的,目前在OSX,Windows和多个Linux发行版上运行。 有关用法的详细信息,请参见下面的自述文件

    "streaming API is as easy as ABC or " &lt;&lt; 123; LOGF(WARNING, "Printf-style syntax is also %s", "available"); 内容 建筑物G3log 先决条件 配置选项 生成命令 安装 包装 测验 CMake模块 API说明概述 ...

    as命令 GUN汇编器

    as命令是二进制工具集GNU Binutils的一员,是GNU推出的一款汇编语言编译器集,用于将汇编代码编译为二进制代码,它支持多种不同类型的处理器。 语法格式:as [参数] [文件] 常用参数: -ac 忽略失败条件 -ad ...

    ASQLite 整合 DISQLite 魔改第一版 最大兼容 支持 D2009-DXE8 和 64 位编译平台

    所有调试记录代码全部加了条件编译块控制,减小体积,提高调度效率 优化类型数据存取分支代码,减少体积,提高读写效率 去除初次读取数据 100 字节大小缓冲区的限制,防止字符串乱码 其它性能优化 其它 bug 修复 ...

    关于优化C#程序的四十八种方法

    一、用属性代替可访问的字段 二、readonly(运行时常量)和const(编译时常量) 三、is与as 四、ConditionalAttribute代替#if #endif条件编译

    使用JMeter对ZK性能测试时需要安装的插件

    (提供给那些没有条件编译的朋友) ———— 使用方法: 1.解压后classes\foo\jmtest目录 直接覆盖在 被测的ZK平台对应目录中(WEB-INF下)。 2.修改zk.xml文件,添加下面内容(WEB-INF下) &lt;system-config&gt; ...

    提高C#编程水平的50个技巧

    提高C#编程水平的50个技巧 1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 ...4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 ......

    提高CS编程水平的50个要点

    提高CS编程水平的50个要点 1.总是用属性 (Property) 来代替可访问的数据成员 ...4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 6.区别值类型和引用类型

    libevent v2.0.10源码(跨平台事件触发的网络库)

     编译库代码,编译脚本会判断OS支持哪种类型的事件机制(select、epoll或kqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的(否则也不能所谓的跨平台了)。在linux redhat as 4 u 2 上编译相当...

    libevent-2.1.1-alpha.tar.gz

     编译库代码,编译脚本会判断OS支持哪种类型的事件机制(select、epoll或kqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的(否则也不能所谓的跨平台了)。在linux redhat as 4 u 2 上编译相当...

    libevent-0.7c 源码(资料中转)

     编译库代码,编译脚本会判断OS支持哪种类型的事件机制(select、epoll或kqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的(否则也不能所谓的跨平台了)。在linux redhat as 4 u 2 上编译相当...

    java8源码-cassandra-dtest:Cassandra分布式测试

    ASF dtest 存储库,而不是这里。 镜像在 github.com/apache/cassandra-dtest。 Cassandra 分布式测试 集群测试。 先决条件 应安装 ccm 的最新副本以启动和停止 Cassandra。 测试是使用鼻子测试运行的。 这些测试需要...

    xq-mustache:XQuery的髭模板语言的部分实现

    小胡子XQuery 3.1的髭模板语言的部分... render ($template as item (), $hash as map ()) as xs:string 编译编译模板就像调用以下命令一样容易: compile ($template as item ()) as element (fn:analyze-string-re

Global site tag (gtag.js) - Google Analytics