我有一个Haxe类,它正在增长得相当大。它主要由静态方法和属性组成。(这是一个设置为编译为 JS 目标的模块)。
我想将一些复杂的静态函数分离到另一个类中。
有没有办法用元标记标记它/指示另一个类是原始类的"扩展"?
类似@:native("OriginalClass") class OtherClass {...}
目标是避免必须编写完整的变量访问(例如:OriginalClass.LOG_QUEUE
vs. LOG_QUEUE
)或将导入与 OtherClass 顶部使用的每个 OriginalClass 的静态方法/属性混杂在一起。基本上,让它知道它"正在使用"与 OriginalClass 相同的成员(每当在编译时找到"未定义"的成员时)。
例:
如果 OriginalClass 有static var LOG_QUEUE:Array<String>;
那么 OtherClass 就会意识到,LOG_QUEUE
编译到这个 JS 代码的任何用法都会OriginalClass.LOG_QUEUE
好的,在与 Slack 上的 Haxe 专家组的 Dima Granetchi 讨论后得到了解决方案。
现在,虽然这仍然会生成使用 OriginalClass
的静态成员的OtherClass
,但您可以使用通配符*
符号来减少大多数(如果不是全部)模块/类的静态成员的 import 语句数量,如以下示例所示:
// 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
中定义的 TypeDefs 似乎没有得到识别/解析(可能是由于缺少公共访问器,但我无法在我的 typedefs 上设置它)。您始终可以使用单独的导入语句导入这些特定的 TypeDef,如下所示:
//Somewhere at the top of OtherClass.hx...
import somePackage.OriginalClass.MyTypeDef;