haxe类型定义的约束条件(Constraints)

haxe的泛型在使用中可以定义约束条件,<T>可以通过

typedef Measurable = {
  public var length(default, null):Int;
}//这里定义了一个可获取长度的约束条件

class Main {
  static public function main() {
    trace(test([]));
    trace(test(["bar", "foo"]));
    // String should be Iterable<String>
    //test("foo");
  }

  #if (haxe_ver >= 4)
  static function test<T:Iterable<String> & Measurable>(a:T) {
  #else
  static function test<T:(Iterable<String>, Measurable)>(a:T) {
  #end
    if (a.length == 0) return "empty";
    return a.iterator().next();
  }
}

在haxe4以上的版本 可用<T:Iterable<String> & Measurable>来描述,4以下版本用<T:(Iterable<String>, Measurable)>来描述

这样可以精确使用泛型,本例子说了,传入的参数必定是可迭代型,且必须有length属性的。

也可以但条件约束,如下:

class Main {
  static public function main() {
    trace(test([]));
    trace(test(["bar", "foo"]));
  }

  static function test<T:Iterable<String>>(a:T) {
    return a.iterator().next();
  }
}

只要是能迭代的就行

猜你喜欢

转载自blog.csdn.net/keniv/article/details/88325777