ActionScript库项目与Flex库项目

时间:2015-04-14 23:00:45

标签: actionscript-3 flash flex actionscript flash-builder

我从Flash Builder 4.7,AIR SDK 15,16和17,Flex SDK 4.6中的FlexLib项目和AS3 Lib项目之间的不一致性中得到了一些问题。

这些常见的事情是FlexLib不允许(突出显示语法错误)来构建/编译常规AS3Lib项目中允许的代码片段。

请注意,下面的例子是简化的,即使它违反了良好做法,也有现实生活中的用例。

包上的内部类

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

在Flex Library Project中,此代码会导致:

  

1083:语法错误:包是意外的。

在常规的ActionScript库项目中,它可以正常工作,没有任何警告。

数组键类型贪婪

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

在Flex Library Project中,此代码会导致:

  

1067:将String类型的值隐式强制转换为不相关的类型   类。

在常规的ActionScript库项目中,它可以正常工作,没有任何警告。

常量定义的类

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

在Flex Library Project中,此代码会导致:

  

1120:访问未定义的属性FileClass。

在常规的ActionScript库项目中,它可以正常工作,没有一个警告。

如果有人能说出为什么会发生这种情况,或者能给我一个寻找解决方案的线索,我将非常感激。

1 个答案:

答案 0 :(得分:3)

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

  

使用旧版编译器       对于ActionScript项目,Flash Builder默认使用ActionScript编译器(ASC)。如果您使用的是Adobe Flex SDK 4.6或早期版本的Flex SDK,请选择“使用旧版编译器”以使用较旧的编译器。

我想这解释了差异。


以下是尝试解决此问题。

我对图书馆项目不太了解。 从我在资源中找到的(上面的链接),这些项目产生.swc文件。 我也不太喜欢弯曲。 Flex是“只是”用actionscript编写的框架。

您的库是动作脚本库还是flex库,实际上并不是用户的选择,而是您的代码所做的事情。

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

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

您的是执行该编译步骤的人,而不是您图书馆的用户。如果他们能够执行这个编译,我认为他们不关心。 实际上他们关心的是他们的项目是否包含你的库(.swc文件)。我想这就是这种情况,因为.swc将被使用,而不是编译。

毕竟,如果它是一个动作脚本库,则别无选择,因为每个flex项目都是一个动作脚本项目。 (但每个actionscript项目都是一个flex项目)

构建你的库项目(无论编译器是什么工作),看看你是否可以在actionscript和flex项目中使用生成的.swc文件。