rust - 为什么在.map 中执行的闭包不会改变捕获的值?

标签 rust

<分区>

这是我的代码:

let mut v = Vec::new();
let _ = (0..5).map(|i| v.push(i));

println!("{:?}", v);   //output: []

捕获的值为v。我希望上面的代码打印 [0, 1, 2, 3, 4],但它打印 []

这是为什么?

最佳答案

map 方法不会立即遍历元素。相反,它会创建一个您稍后可以使用的惰性迭代器。强制新迭代器执行其工作的方法之一是 Iterator::collect 方法。在您的情况下,它将生成一个充满空值的新集合(() 因为它是 v.push(i) 的类型):

let mut v = Vec::new();
let v2: Vec<()> = (0..5).map(|i| v.push(i)).collect();
println!("{:?}", v); //output: [0, 1, 2, 3, 4]

这通过创建向量 v2 来完成多余的工作。尽量避免这种低效操作。

关于rust - 为什么在.map 中执行的闭包不会改变捕获的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461796/

相关文章:

rust - 检查宏中定义的项目中的功能标志

rust - 为什么我可以调用闭包两次,即使我已经将一个变量移入其中?

rust - 在 `.into()` 上调用时 `RawOrigin:Signed(who)` 会做什么?上下文如何影响它?

rust - 宏不扩展插值标记树吗?

rust - 如何阅读基于 Tokio 的 Hyper 请求的整个主体?

rust - 我怎样才能得到真正的核心数?

architecture - 应用架构 : Problem with Mutable/Immutable reference

macros - 将非元组参数转换为元组的宏

rust - 为什么我不能连续两次调用可变方法(并存储结果)?

rust - 你如何编译一个 Rust 库来定位 asm.js?