【问题标题】:How does list mapping in dart actually work?dart 中的列表映射实际上是如何工作的?
【发布时间】:2023-03-07 20:19:01
【问题描述】:

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

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

我明白了

1
2
3

在飞镖中尝试相同

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

没有输出输出,我错过了什么?

【问题讨论】:

    标签: list dictionary dart


    【解决方案1】:

    JavaScript 与 Dart 不同。

    根据documentationIterable 上的map 方法旨在

    返回一个新的 lazy Iterable,其中包含通过按迭代顺序在此 Iterable 的每个元素上调用 f 创建的元素。

    换句话说,map 方法中的函数在需要时才被调用,因为它是惰性调用的。它不会返回任何东西,直到有东西要求它应该返回什么。 只要返回的Iterable没有被迭代,提供的函数f就不会被调用。

    试试dartpad.dev

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

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

    试试

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

    你会看到你得到了你想要的结果,因为map方法中的函数被print方法调用了。

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

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2011-09-27
      • 2021-12-16
      • 2013-03-14
      • 2021-03-23
      • 2011-02-11
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多