如何装饰实现只读属性的getter函数?
How to decorate getter function that implements read-only property?
我想创建灵活的逻辑,允许通过接口操作复杂的包装器对象。但有时这些对象可能只是简单对象的一个实例,它们是 "wrapping"。像这样:
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
引用的存储真正的 class 变量。签名(get, null)
不符合接口的要求,但保证变量是真实的,而不只是替代getter/setter函数。
我的计划可以实现吗?或者我应该改变我的任务方法?
我决定在核心 ICoordsAccess
界面中使用 coords(get, null)
访问。然后我以 "SmartAccess" 风格实现这个签名:
inline function get_coords() return this;
我不太确定这个函数是内联的。
我想创建灵活的逻辑,允许通过接口操作复杂的包装器对象。但有时这些对象可能只是简单对象的一个实例,它们是 "wrapping"。像这样:
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
引用的存储真正的 class 变量。签名(get, null)
不符合接口的要求,但保证变量是真实的,而不只是替代getter/setter函数。
我的计划可以实现吗?或者我应该改变我的任务方法?
我决定在核心 ICoordsAccess
界面中使用 coords(get, null)
访问。然后我以 "SmartAccess" 风格实现这个签名:
inline function get_coords() return this;
我不太确定这个函数是内联的。