2014-12-03 17 views
0

我有这个Haxe类正在增长相当大。它主要由静态方法&属性组成。 (这是一个设置为JS目标编译的模块)。Haxe(JS Target)有没有办法让另一个类可以使用静态成员,就好像它是自己的一样?

我想将一些复杂的静态函数分离到另一个类中。

是否有任何方法用metatag标记/指示其他类是对原始类的“扩展”?

喜欢的东西@:native("OriginalClass") class OtherClass {...}

的目的是为了避免不必编写完整的变量访问(例如:OriginalClass.LOG_QUEUELOG_QUEUE)或杂波与在OtherClass的顶部使用的每个OriginalClass的静态方法/属性进口。基本上,要让它知道它“正在”使用与OriginalClass相同的成员(每当在编译时找到'未定义'的成员时)。

例子:

如果OriginalClass有static var LOG_QUEUE:Array<String>;然后OtherClass将意识到的LOG_QUEUE任何使用编译这个js代码OriginalClass.LOG_QUEUE

回答

1

好了,有了一个解决方案从与迪马讨论Granetchi后Haxe Slack专家组。

现在,虽然这仍然会生成使用OriginalClass的静态成员的OtherClass,但您可以通过使用大多数(如果不是全部)模块/类的静态成员来减少导入语句的数量通配符*符号,就像这个例子:

// OriginalClass.hx 
package somePackage; 

class OriginalClass { 
    public static var LOG_QUEUE:Array<String>; 

    public static function main() { 
     LOG_QUEUE = []; 

     OtherClass.doSomething(); 
    } 

    public static function doSomethingOriginal() { 
     LOG_QUEUE.push("World!"); 
    } 
} 


// OtherClass.hx 
import somePackage.OriginalClass.*; // <-- Demonstrating the WILDCARD (*) symbol 

class OtherClass { 
    public static function doSomething() { 
     LOG_QUEUE.push("Hello"); //Resolved to OriginalClass.LOG_QUEUE 
     doSomethingOriginal(); //Resolved to OriginalClass.doSomethingOriginal() 
    } 
} 

虽然这是一个很小的例子,当你在你的OtherClass使用几个不同的十几静态成员变得更加有用。在OtherClass内部使用的OriginalClass定义

的typedef似乎并没有得到认可/解决(可能是由于缺少公共访问,但我无法把它放在我的typedef )。您可以随时导入那些具有单独导入语句的特定TypeDefs,如下所示:

//Somewhere at the top of OtherClass.hx... 
import somePackage.OriginalClass.MyTypeDef; 
相关问题