我有这个代码:

let mut myFile = readFile();
let reader = BufReader::new(myFile);
let tasks = reader.lines()
        .map(|line| line.expect("Couldn't read line"));

当我在"任务"上停留时,我看到了这个:

let tasks: Map<Lines<BufReader<File>>, fn(Result<String>) -> String>

查看代码:

reader.lines()在文件中的行上提供迭代器. map()接受一个函数/闭包(在每行执行一些操作并返回另一个值).

因此,我期望返回值map()是另一个表示值列表的数据 struct .

为什么是Map

推荐答案

Rust 的迭代者是懒惰的.当调用some_iterator.lines(...).map(...)时,实际迭代不会完成.相反,建立了一个链或一个"俄罗斯娃娃" struct ,其中每个迭代器都包装在它前面的迭代器.

当您试图实际使用迭代器的结果时,它们都将开始执行.例如,通过循环读取它.如果你想现在执行计算,以后再使用结果,在迭代器链的末尾添加一个.collect()(你可能需要指定你想要返回的集合,.collect::<Vec<_>>()左右).

Rust相关问答推荐

关联类型(类型参数)命名约定

如何使用Match比较 struct 中的值

在特征中使用Async时,如何解决不透明类型`impl Future<;out=self>;`不满足其关联的类型边界和警告?

如何提高自定义迭代器的`extend`性能

在Rust中有没有办法在没有UB的情况下在指针和U64之间进行转换?

如何将单个 struct 实例与插入器一起传递到Rust中的映射

关于 map 闭合求和的问题

使用关联类型重写时特征的实现冲突

考虑到Rust不允许多个可变引用,类似PyTorch的自动区分如何在Rust中工作?

如何执行数组文字的编译时串联?

Rust:为什么 &str 不使用 Into

带引脚和不带引脚的比较功能

Rust 如何返回大类型(优化前)?

相当于 Rust 中 C++ 的 std::istringstream

在构建器模式中捕获 &str 时如何使用生命周期?

为什么 File::read_to_end 缓冲区容量越大越慢?

tokio async rust 的 yield 是什么意思?

制作嵌套迭代器的迭代器

如何从 Rust 中不同类型的多个部分加入 Path?

如何从 Rust 应用程序连接到 Docker 容器中的 SurrealDB?