克隆一个 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 != ' ');
}
我在使用函数时出错,因为借用一个可变的,如果还有一个不可变的借用,就像多次借用一个可变的一样是不允许的。
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 != ' ');
}