ChatGPT解决这个技术问题 Extra ChatGPT

列出飞镖中双点(。)的使用?

有时我会看到这个List list = [];

然后list..add(color)

使用 1 点(.)和 2 点(..)有什么区别?


A
Alexandre Ardhuin

.. 称为 cascade notation。如果您想在同一个对象上调用多个方法,它允许您不重复相同的目标。

List list = [];
list.add(color1);
list.add(color2);
list.add(color3);
list.add(color4);

// with cascade

List list = [];
list
  ..add(color1)
  ..add(color2)
  ..add(color3)
  ..add(color4);

澄清一下,这让我感到困惑,在掌握这个概念之前我重复了几次:在撰写本文时,级联运算符有两种变体。即..和..?不要混淆......和......?它们是不同的,在 Dart 中称为扩展运算符。而传播运算符...和...?用于列表/集合,级联..和..?可以在任何类型的对象上调用,而不仅仅是列表。 (上面的示例代码使用列表,但可以使用另一个对象,例如控制器)。传播和级联也做完全不同的事情。
G
Günter Zöchbauer

它是 Dart 的级联运算符

var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);

导致 l1 成为列表 [0, 1, 2, 3]

var l1 = new List<int>().add(0).addAll([1, 2, 3]);

导致错误,因为 .add(0) 返回 void

..(在前面的例子中)指的是 new List(),而 .(在后面的例子中)指的是表达式前一部分的返回值。

引入 .. 是为了避免在 add() 等各种方法中返回 this 以便能够以流畅的方式使用 API。

.. 为所有类提供了开箱即用的功能。


提到 .. (in former example) refers to new List(),您的意思是我们在使用 .. 时再次创建一个新的 List,我认为 NO。我对您的 new 词感到困惑,它真的是新词还是您在这里谈论的是 new 关键字。
第一个 new 现在是可选的。 .. 引用 new List<int>() 返回的列表,允许在其上调用多个方法,如 add(0) addAll(...) 而无需重复 l1.,它是分配给 l1 的创建的列表实例,不是链中最后一个方法的返回值 (addAll(...))。这回答了你的问题了吗?
绝对地!我知道 new 从 Dart 2.0 开始是可选的,我只是对上述上下文中的 new 感到困惑,感谢您的解释。
..add(6) 类似于 l1.add(6).add(6) 类似于 l1.add(5).add(6)add(5) 返回 void,您不能在 void 上调用 add()
遵循本文档: - dartlang.org/guides/language/language-tour#cascade-notation- 严格来说,级联的“双点”符号不是运算符。它只是 Dart 语法的一部分。
M
Mohsin AR

级联 (..) 允许您对同一对象进行一系列操作。阅读文档了解详情

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

前面的例子等价于:

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

感谢这个例子!知道为什么 ..onClick 不能转换为 button.classes.onClick 吗?
感谢您在示例中使用作业。作为 Dart 的新手,我读过一些关于双点符号的内容,但认为它只是用于链接 void 方法。
L
L_J

.. 在 dart 中称为 级联运算符

它允许您使用多个子序列操作:

例子:

banerad..load()..show().

List coursename;
coursename..add("java")..add("flutter" )..add("dart");

这是另一个例子

https://i.stack.imgur.com/Iv4eL.png


Z
Zafar Iqbal

双点(..)也称为级联运算符

如果您想在同一个对象上调用多个方法,它允许您不重复相同的目标。

例如没有双点

var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;

但是使用“..”之后,上面的代码会写成这样:

var paint = Paint()
..color = Colors.black
..strokeCap = StrokeCap.round
..strokeWidth = 5.0;

三点(…)即扩展运算符

“...”也称为扩展运算符,它提供了一种将多个值插入集合的简洁方法。您可以使用它来将列表的所有元素插入到另一个列表中:

通常我们使用 .add() 或 .addAll() 将数据添加到列表中,例如:

var list = [1, 2, 3];
var list2=[];
list2.addAll(list);

使用“...”后,我们将编写如下代码:

var list = [1, 2, 3];
var list2 = [0, ...list];