Haxe:与接口匹配的函数参数

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

我有一个方法(在Haxe中,它需要接受任何具有'width'和'height'属性的对象。我假设我可以使用Interface以某种方式执行此操作,但是出于我的目的,传入的对象不需要实现接口,它只需要是具有width和height属性的any对象。

这不起作用,因为您传入的对象需要实现接口:

Interface IWidthAndHeight{
    public var width : Float;
    public var height : Float;
}

Class Main{

    var o : IWidthAndHeight;

    public function setObject( o : IWidthAndHeight ){
        this.o = o;
    }

}

当前,我正在使用Dynamic,并手动检查属性是否存在,但是有没有更聪明的方法?当前方法:

Class Main{

    var o : Dynamic;

    public function setObject( o : Dynamic ){
        if (propertiesExist(o,['width','height'])){
            this.o = o;
        }
    }

    // Note: propertiesExist is my own method. Just assume it works :)
}

任何帮助表示赞赏。谢谢!

interface arguments haxe
1个回答
0
投票

您可以在这里使用anonymous structures

typedef WidthAndHeight = {
    width:Float,
    height:Float
}
class Main {
    var o:WidthAndHeight;
    public function setObject(o:WidthAndHeight) {
        this.o = o;
    }
}

这只是var o:{width:Float, height:Float};typedef的替代。在编译时将检查setObject参数中的任何类或结构的这些字段,这称为structural subtyping

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