Dart 语言扩展方法

Posted

技术标签:

【中文标题】Dart 语言扩展方法【英文标题】:Dart Language Extension Method 【发布时间】:2021-10-09 07:36:20 【问题描述】:

我正在阅读dart官方文档中的扩展方法,并到达了document的底部。这里,文档提到List<T> operator -() => reversed.toList(); 行作为List<T> 的扩展方法。 这是完整的代码。

extension MyFancyList<T> on List<T> 
  int get doubleLength => length * 2;
  List<T> operator -() => reversed.toList();
  List<List<T>> split(int at) => [sublist(0, at), sublist(at)];

operator -()operator +(List&lt;T&gt; t)operator *(List&lt;T&gt; t) 是什么意思,我如何在 List 上使用它们作为扩展方法?

【问题讨论】:

final list = [1,2,3]; print(-list); 【参考方案1】:

这意味着您实际上可以将其用作列表中的运算符。例如:

final list = [1,2,3,4,5];
print(-list);

打印 [5,4,3,2,1]

就个人而言,我不会实现这样的反转。我认为对于其他开发人员来说这将是非常不清楚的,而 reversed 方法非常清楚它的作用。但是,我知道这只是一个关于如何在扩展中定义运算符的示例。

operator +(List&lt;T&gt; t)operator *(List&lt;T&gt; t) 位于两个列表之间。例如:

final a = [1,2];
final b = [3,4];
print(a + b);

打印 [1,2,3,4]

【讨论】:

谢谢@TmKVU 这很简单:-D。我太傻了;-) +(List&lt;T&gt; t)*(List&lt;T&gt; t) 怎么样? 我将它们添加到我的答案中

以上是关于Dart 语言扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

尝鲜 Dart 2.7 最新语法之扩展方法

尝鲜 Dart 2.7 最新语法之扩展方法

▩Dart-Extension方法

jsonEncode 不适用于枚举扩展;有解决方法吗?

如何在 Dart 中仅使用级联或链式调用干净地映射/排序/折叠/排序/扩展?

Neumorphism 组件 ーー Dart extension 扩展