有哪些方法可以实现从另一个类访问父实例Vector单元?
我的问题是关于用“??”评论的行:
class Test {
static function main() {
var a:A = new A();
var b:B = new B(a, 115);
}
}
class A {
public var cells:haxe.ds.Vector<Float>;
public function new() {
cells = new haxe.ds.Vector(1000);
}
}
class B {
public var a:A; // the "parent"
public var my_offset:Int;
public var my_cells:haxe.ds.Vector<Float>; //??
public function new(a:A, offset:Int) {
my_offset = offset;
my_cells[2] = 0.5; //?? actually a.cells[my_offset + 2];
}
}
是否可以:
答案 0 :(得分:3)
您可以创建一个包裹abstract
的{{1}}类型,通过定义@:arrayAccess()
methods自动添加所需的偏移量:
Vector
注意:抽象不一定需要包装结构,它也可以是一个类。你不能直接包装class Main {
static function main() {
var cells = new haxe.ds.Vector(1000);
cells[115] = 1.5;
var cellsWithOffset = new VectorWithOffset(cells, 115);
trace(cellsWithOffset[0]); // 1.5
}
}
abstract VectorWithOffset<T>(VectorWithOffsetData<T>) {
public function new(vector:haxe.ds.Vector<T>, offset:Int) {
this = {vector: vector, offset: offset};
}
@:arrayAccess inline function get(i:Int):T {
return this.vector[i + this.offset];
}
@:arrayAccess inline function set(i:Int, v:T):T {
return this.vector[i + this.offset] = v;
}
}
typedef VectorWithOffsetData<T> = {
var vector:haxe.ds.Vector<T>;
var offset:Int;
}
,因为Vector
需要存储在某个地方,而摘要不能有自己的成员变量。