Flutter中为何where方法内的print语句未执行?
Dart里where方法为啥不立刻执行回调?
这其实是Dart的惰性求值特性导致的。where方法返回的不是直接的结果列表,而是一个惰性迭代器——它不会在你把结果赋值给x的时候就立刻遍历原列表跑回调,只有当你真的要用到这个迭代器里的内容(比如print(x)、循环遍历、转成列表)的时候,才会逐个去原列表里拿元素执行回调。
看你的代码:
final List<int> numbers=[10,20,30,40,50,60,70,80,90]; final x=numbers.where((element) { print('Okay'); return element>50; }); // 只有执行这行时,才会触发where的回调遍历 print(x);
- 单独执行
final x=numbers.where(...)时,x只是个“待激活”的迭代器,回调里的print('Okay')根本不会跑。 - 当你
print(x)的时候,Dart需要把这个迭代器转成字符串展示,这时候才会遍历原列表的9个元素,所以print('Okay')会执行9次,同时把筛选出的大于50的元素输出。
要是想让回调立刻执行,直接把结果转成列表就行,toList()会强制遍历所有元素生成新列表:
final x=numbers.where((element) { print('Okay'); return element>50; }).toList();
这时候不管你用不用x,print('Okay')都会直接执行9次。
内容的提问来源于stack exchange,提问作者user22362195
相关产品推荐
相关产品推荐

