如何装饰实现只读属性的getter函数?

问题描述 投票:0回答:1

我想创建灵活的逻辑,允许通过接口操作复杂的包装器对象。但有时这些对象可能只是一个简单对象的实例,它们正在“包装”。像这样的东西:

interface ICoords {
    var x:Float;
    var y:Float;
}

interface ICoordsAccess {
    var coords(default, null):ICoords;
}

class DumbAccess implements ICoordsAccess implements ICoords {
    // ICoordsAccess interface
    public var coords(default, null):ICoords;

    // ICoords interface
    public var x:Float;
    public var y:Float;

    public function new() {
        coords = this; // ...dumb...
    }
}

class SmartAccess implements ICoordsAccess implements ICoords {
    // ICoordsAccess interface
    public var coords(get, null):ICoords; // doesn't comply with interface signature

    function get_coords() return this; // CUTE!

    // ICoords interface
    public var x:Float;
    public var y:Float;

    public function new() {
        // empty constructor
    }
}

class WrapperAccess implements ICoordsAccess {  
    // ICoordsAccess interface
    public var coords(default, null):ICoords;

    public function new() {
        coords = new DumbAccess(); // or SmartAccess doesn't matter
    }
}

代码使用IObjectAccess实例运行,并没有处理它是什么。我可以使用具有常量值的具体实例或包装器来更改它们自己的逻辑。

但是我想通过替换getter函数(可能是内联?)来排除haxe只读访问签名(default, null),它排除了真实类变量中this引用的存储。签名(get, null)不符合接口的要求,但保证变量是真实的,而不仅仅是取代getter / setter函数。

我的计划是否可以实现?或者我应该改变我的任务方法?

wrapper getter haxe
1个回答
0
投票

我决定在核心coords(get, null)界面中使用ICoordsAccess访问。然后我以“SmartAccess”风格实现此签名:

inline function get_coords() return this;

我还不确定这个函数是否内联。

© www.soinside.com 2019 - 2024. All rights reserved.