Dart中Iterable调用toList()单独使用无效,print内生效原因
核心原因
Iterable.toList() 本身是「返回新对象」的方法,它不会原地修改调用它的Iterable对象,方法返回值才是转换后得到的新List实例。
你写的squares.toList();这行代码确实运行了转换逻辑、生成了对应的List对象,但你没把这个返回值存下来,这个临时生成的List用完就被回收了,变量squares从头到尾存的都是最开始map返回的Iterable类型对象,根本没发生变化。
两次打印结果差异的原因
- 第一次
print(squares)传入的还是最开始的Iterable对象,所以输出Iterable的默认格式(1, 4, 9, 16) - 第二次
print(squares.toList())是把toList()刚生成的新List直接传给了print函数,所以能输出List的默认格式[1, 4, 9, 16]
正确使用方式
如果要把Iterable转成List后后续使用,必须接收toList()的返回值,参考代码:
void main() { const numbers = [1, 2, 3, 4]; // 链式调用toList并接收返回值,此时squares类型就是List<int> final squares = numbers.map((number) => number * number).toList(); print(squares); // 输出:[1, 4, 9, 16] }
补充说明:Dart里Iterable相关的转换方法(包括
map、where、toSet、toList等)都不会修改原调用对象,所有转换结果都通过方法返回值输出,使用时必须手动接收返回值才能拿到目标结果。
内容的提问来源于stack exchange,提问作者Siddhartha Sharma
相关产品推荐
相关产品推荐

