dart扩展函数

1,755 阅读1分钟

扩展字符串

extension ParseNumbers on String {
  int parseInt() {
    return int.parse(this);
  }
  double parseDouble() {
    return double.parse(this);
  }
}
main() {
  int i = '42'.parseInt();
  print(i);
}

由于扩展方法是静态解析的,所以不能用dynamic

dynamic d = '2';
d.parseInt();
→ Runtime exception: NoSuchMethodError
var v = '1';
v.parseInt(); // Works!

扩展方法是静态解析的,因此它们与调用静态函数或辅助方法一样快,但具有更友好的调用语法。

扩展可以具有类型变量

extension FancyList<T> on List<T> {
  List<T> get evenElements {
    return <T>[for (int i = 0; i < this.length; i += 2) this[i]];
  }
}

medium.com/dartlang/da…