克隆一个 mut 引用以便在其他地方使用 mut 引用

cloning a mut reference in order to use the mut reference elsewhere

我在使用函数时出错,因为借用一个可变的,如果还有一个不可变的借用,就像多次借用一个可变的一样是不允许的。

pub fn _function(list: &mut Vec<char>) {
     for (n, c) in list.iter().enumerate() {
         if *c == ' ' {
             list.remove(n);
         }
     }
}
error[E0502]: cannot borrow `*list` as mutable because it is also borrowed as immutable
 --> src/lib.rs:4:14
  |
2 |      for (n, c) in list.iter().enumerate() {
  |                    -----------------------
  |                    |
  |                    immutable borrow occurs here
  |                    immutable borrow later used here
3 |          if *c == ' ' {
4 |              list.remove(n);
  |              ^^^^^^^^^^^^^^ mutable borrow occurs here

我遇到的唯一解决方案是克隆 列表

pub fn _function(list: &mut Vec<char>) {
     for (n, c) in list.clone().iter().enumerate() {
         if *c == ' ' {
             list.remove(n);
         }
     }
}

我想知道是否有任何其他解决方案可以在不克隆 list 和使用更多内存的情况下使用这两个函数。

并没有真正通用的方法来同时读取和修改 vec。但是有针对特定情况的临时解决方案。

在这里,您可以使用 retain 修改 vec 以仅保留验证谓词的元素:

pub fn _function(list: &mut Vec<char>) {
     list.retain(|&c| c != ' ');
}