我有一个由
我知道这在Rust中是正常行为,但避免这个错误的推荐方法是什么?我应该先复制元素吗?放弃使用循环并以不同的方式进行迭代?学习代码设计?
有没有一种Rust的方法来做到这一点?
Element
组成的数组,我想迭代它来做一些事情,然后在循环中迭代所有Element
来做某些事情。这些元素之间存在关联,因此我想迭代到所有其他元素以检查某些内容。这些元素是可变引用,出于某种原因。虽然有点笼统,但我试图保持通用(也许不应该)。struct Element;
impl Element {
fn do_something(&self, _e: &Element) {}
}
fn main() {
let mut elements = [Element, Element, Element, Element];
for e in &mut elements {
// Do stuff...
for f in &mut elements {
e.do_something(f);
}
}
}
正如预期的那样,我收到了这个错误:
error[E0499]: cannot borrow `elements` as mutable more than once at a time
--> src/main.rs:13:18
|
10 | for e in &mut elements {
| -------------
| |
| first mutable borrow occurs here
| first borrow later used here
...
13 | for f in &mut elements {
| ^^^^^^^^^^^^^ second mutable borrow occurs here
我知道这在Rust中是正常行为,但避免这个错误的推荐方法是什么?我应该先复制元素吗?放弃使用循环并以不同的方式进行迭代?学习代码设计?
有没有一种Rust的方法来做到这一点?
for i in 0..elements.len()
)。 - oli_obk