<分区>
这是我的代码:
let mut v = Vec::new();
let _ = (0..5).map(|i| v.push(i));
println!("{:?}", v); //output: []
捕获的值为v
。我希望上面的代码打印 [0, 1, 2, 3, 4]
,但它打印 []
。
这是为什么?
标签 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/