ActionScript 库项目与 Flex 库项目

ActionScript Library Project vs. Flex Library Project

由于 Flash Builder 4.7、AIR SDK 15、16 和 17、Flex SDK 4.6 中 FlexLib 项目和 AS3 Lib 项目之间的不一致性质,我遇到了几个问题。

这些的共同点是 FlexLib 不允许(突出显示语法错误)到 build/compile 常规 AS3Lib 项目中允许的代码片段。

请注意,下面的示例是经过简化的,并且有现实生活中的用例,即使它违背了良好的做法。

内部 class 高于包

internal class Before 
{
    public function Before(){}
}
package
{
    public class Main
    {
        public function Main()
        {
        }
    }
}

在 Flex 库项目中,此代码导致:

1083: Syntax error: package is unexpected.

在常规的 ActionScript 库项目中,它工作得非常好,没有任何警告。

数组键类型贪心

var array:Array = [Boolean, Number, XML];
for(var c:Class in array)
{
    if(c is Object) { trace('test') }
}

在 Flex 库项目中,此代码导致:

1067: Implicit coercion of a value of type String to an unrelated type Class.

在常规的 ActionScript 库项目中,它工作得非常好,没有任何警告。

常量定义class

public static const FileClass:Class = String;
public function main():void
{
    if('test' is Vector.<FileClass>)
    {
        trace('what?');
    }
}

在 Flex 库项目中,此代码导致:

1120: Access of undefined property FileClass.

在常规的 ActionScript 库项目中,它工作得很好,没有一个警告。

如果有人能说说为什么会发生这种情况,或者能告诉我在哪里寻找解决方案,我将不胜感激。

根据this,涉及到两个不同的编译器:

Use Legacy Compiler For ActionScript projects, Flash Builder uses the ActionScript Compiler (ASC) by default. If you are using Adobe Flex SDK 4.6 or an earlier version of the Flex SDK, select Use Legacy Compiler to use the older compiler.

我想这就是区别所在。


以下是解决该问题的尝试。

我不太喜欢图书馆项目。 根据我在资源(上面的 link)中找到的内容,这些项目生成了一个 .swc 文件。 我也不太喜欢 flex。 Flex 是 "just" 一个用 actionscript 编写的框架。

您的库是 actionscript 库还是 flex 库并不是用户的真正选择,而是您的代码的作用。

如果您的库包含一些 flex 组件,我会说它是一个 flex 库项目。 但如果它是普通的旧动作脚本,它就是一个动作脚本库。

假设您的库是一个动作脚本库。 您将您的库编译成一个 .swc 文件并完成它。

您的 是执行该编译步骤的人,而不是您图书馆的用户。我认为他们是否可以执行此编译与他们无关。 他们真正关心的是他们包含您的库(.swc 文件)的项目是否编译。我猜会是这种情况,因为将使用 .swc,而不是编译。

毕竟,如果是actionscript库,就没得选了,因为每一个flex工程都是一个actionscript工程。 (但每个 actionscript 项目都是一个 flex 项目)

构建您的库项目(无论编译器如何工作)并查看您是否可以在 actionscript 和 flex 项目中使用生成的 .swc 文件。