我来自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,对map
的Iterable
方法旨在
return a new lazy
Iterable
with elements that are created by callingf
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');
}
在上面的示例中,调用/调用了
map
的arr
方法中的函数,因为它是打印功能中的$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/