list - dart中的列表映射实际上如何工作?

标签 list dictionary dart

我来自javascript背景,在javascript中,如果我有一个包含元素[1,2,3]的数组,我可以映射该数组并按如下方式对每次迭代执行一个函数:

[1,2,3].map((i) => {
    console.log(i);
    return;
})

我得到
1
2
3

在 Dart 上尝试相同
void main() {
  [1, 2, 3].map((i) {
    print(i);
    return;
  });
}

没有打印输出,我想念什么?

最佳答案

JavaScript与Dart不同。

根据documentation,对mapIterable方法旨在

return a new lazy Iterable with elements that are created by calling f on each element of this Iterable in iteration order.



换句话说,直到需要时才调用map方法中的函数,因为它是被 lazi 调用的。它不会返回任何内容,除非有人要求返回应该返回的内容。只要未迭代返回的Iterable,将不会调用提供的函数f

试试dartpad.dev

void main() {
  var arr = [1, 2, 3];
  var arr2 = arr.map((item)=> {
     item * 2
  });
  print ('$arr2');
}

在上面的示例中,调用/调用了maparr方法中的函数,因为它是打印功能中的$arr2请求的。因此,它在其中运行代码,并且print方法中的参数被打印出来

尝试

  print([1, 2, 3].map((i) {
    print(i);
    return;
  }));

您会看到您得到了所需的结果,因为map方法调用了print方法中的函数。

由于该方法是 lazy ,因此只有在被请求之前,它才被调用。向数组添加map方法不会调用它。您需要在map方法中调用该函数返回的内容。

关于list - dart中的列表映射实际上如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60019250/

相关文章:

python - 比较特定字段的两个字典列表

flutter - Dart引用的回调带有返回值

twitter-bootstrap - 使用 Dart 和 Bootstrap

python - 数字和 if else 语句之间的范围

list - 为什么将列表整数元素转换为字符串时得到 "interface conversion: interface is int32"?

r - 将一个列表映射到另一个列表

Java泛型不完全理解

c++ - 如何以相反的顺序对以一对作为键的 map 进行排序?

python - 对键也是字典的字典键进行排序

reflection - 如果我知道函数的名称,是否可以获取其参数?