【问题标题】:Haxe: Function argument that matches an interfaceHaxe:与接口匹配的函数参数
【发布时间】:2020-04-27 22:42:10
【问题描述】:

我有一个方法(在 Haxe 中)需要接受任何具有“宽度”和“高度”属性的对象。我假设我可以使用接口以某种方式做到这一点,但出于我的目的,传入的对象不需要实现接口,它只需要是 any 具有宽度和高度属性。

这个不行,因为你传入的对象需要实现接口:

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

Class Main{

    var o : IWidthAndHeight;

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

}

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

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】:

    您可以在这里使用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

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多