我想写这样的代码:
let mut v: Vec<Object> = Vec::new();
for e in v.iter_mut() {
if e.some_predicate() {
e.val = v.iter().filter(|o| o.some_predicate()).count();
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 for 循环接受可变借用,然后iter尝试进行不可变借用。我理解为什么借用检查器不喜欢生成的特定类型,但是我尝试执行的操作似乎是安全的,如果我将其重写为使用索引,它可以正常工作:
let mut v: Vec<Object> = Vec::new();
for i in 0..v.len() {
if v[i].some_predicate() {
v[i].val = v.iter().filter(|o| o.some_predicate()).count();
}
}
Run Code Online (Sandbox Code Playgroud)
在 Rust 中这样做的惯用方法是什么?
rust ×1