💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
**Haxe 3.0版本之后** 当包装一个潜在类型,有时候需要保持部分它的功能。因为手工编写转发函数非常繁琐,Haxe 允许添加 `:forward` 元数据到一个抽象类型: ~~~ @:forward(push, pop) abstract MyArray<S>(Array<S>) { public inline function new() { this = []; } } class Main { static public function main() { var myArray = new MyArray(); myArray.push(12); myArray.pop(); // MyArray<Int> has no field length //myArray.length; } } ~~~ 这个例子中的 `MyArray` 抽象类封装了 Array。它的 `:forward` 元数据有两个参数,对应要被转发到潜在类型的字段名。在这个例子中,`main` 方法实例化 `MyArray` 并访问它的 `push` 和 `pop` 方法。注释行表明 `length` 字段是不可用的。 像往常一样我们可以查看 JavaScript 输出来看一下代码如何生成: ~~~ Main.main = function() { var myArray = []; myArray.push(12); myArray.pop(); }; ~~~ 也可以使用 `:forward` 而不带任何参数,来转发所有字段。当然 Haxe 编译器仍然保证字段实际上存在于潜在类型。 >[warning] **花絮**:实现为宏 `:enum` 和 `:forward` 功能都是最初被使用 [构建宏(第9.5节)](http://#) 实现的。虽然这可以在非宏代码很好的运行,但是如果这些功能从宏内部运行它会引起问题。这个实现后来被移到编译器中。