Haxe到AS3:将haxe标准库导出到特定包(以避免模糊的命名冲突)

时间:2014-07-18 23:50:13

标签: actionscript-3 haxe

我有一个haxe库,我需要编译到JS和AS3。 我已经让JS部分工作正常,并且可以在node.js中使用导出的代码。 但是编译到AS-3时遇到以下问题。 haxe编译器包含haxe标准库,并在默认包中生成AS3类:

package  {
    import flash.Boot;
    public class List {
    ...

现在的问题是我得到了大量模糊的引用错误:

Error:(101, 0)  Ambiguous reference to List

在这种情况下,List类与List一起冲突,List被定义为Feathers(Starling)库的一部分。

到目前为止,我还没有找到任何解决方案。我希望有一个编译器标志可用于设置默认包名,但到目前为止还没有找到任何东西。

**编辑**

编译我在项目中包含的羽毛源时出错。 我不想修改羽毛源代码。

/Users/santiago/Documents/source/frameworks/Feathers/source/feathers/controls/renderers/DefaultListItemRenderer.as
Error:(200, 0) [lib (module cuarenta-lib)]: Ambiguous reference to List
Error:(202, 0) [lib (module cuarenta-lib)]: Ambiguous reference to List
Error:(208, 0) [lib (module cuarenta-lib)]: Ambiguous reference to List
Error:(222, 0) [lib (module cuarenta-lib)]: Ambiguous reference to List 

谢谢!

2 个答案:

答案 0 :(得分:0)

编辑:这个答案没有意义,因为List类是Haxe标准库的一部分。为了清楚起见,我将它留在这里。

两种肮脏但简单有效的解决方案。

  • 将您的List类重命名为其他内容。
  • 将您的List类的Haxe版本放在haxe包中。然后当它生成AS3代码时,它将在AS3包中,你不会得到那些模糊的引用错误,因为羽毛库不会用你的List类导入你的新包。

答案 1 :(得分:0)

要将一个类移动到另一个类并避免冲突,您可以使用 @:native 元数据。

将以下内容添加到编译器调用中,以将List重命名为hx.List

--macro addMetadata('@:native("hx.List")', 'List')