Dart语言学习记录:集合.map方法的坑

108 阅读1分钟

.map()

  • 现象
  1. ['a','b','c'].map((e)=> print(e)); print(e)并不会执行。
  2. ['a','b','c'].map((e)=> print(e)).toList();print(e)会执行,
  3. print(['a','b','c'].map((e)=> print(e)))print(e)也会执行。
  • 原因
    ['a','b','c'].map((e)=> print(e));只是创建了一个映射,而没有实际对其进行迭代,因此print(e)不会执行。 为了确保print(e)被执行,你可以调用.toList().forEach()来强制执行迭代,如下所示

    ['a','b','c'].forEach((e) => print(e));
    

    这将遍历数组中的每个元素,并将其作为参数传递给print()函数,从而在控制台中输出每个元素。

    print函数会在控制台中打印传入的参数。当你调用print(['a','b','c'].map((e)=> print(e)))时,它会执行以下步骤:

    1. ['a','b','c']创建一个包含'a'、'b'和'c'的列表。
    2. .map((e) => print(e))创建一个新的映射,将列表中的每个元素作为参数传递给print函数,并将结果作为一个可迭代的对象返回。
    3. 最终这个可迭代的对象被传递给外部的print函数,然后在控制台中输出。

    换句话说,print(['a','b','c'].map((e)=> print(e)))的外部print语句会输出映射返回的可迭代对象,而内部的print语句会输出每个元素。

    需要注意的是,由于map返回的是一个延迟计算的可迭代对象,所以在外部的print语句中打印的内容可能不是立即执行的,它会在迭代对象时才被计算和输出。