这是我的代码,下面是编译器错误。
fn main() {
let mut s = String::new();
let mut push_if = |b, some_str| {
if b {
s.push_str(some_str);
}
};
push_if(s.is_empty(), "Foo");
println!("{}", s);
}
error[E0502]: cannot borrow `s` as immutable because it is also borrowed as mutable
--> src/main.rs:8:13
|
3 | let mut push_if = |b, some_str| {
| ------------- mutable borrow occurs here
4 | if b {
5 | s.push_str(some_str);
| - first borrow occurs due to use of `s` in closure
...
8 | push_if(s.is_empty(), "Foo");
| ------- ^ immutable borrow occurs here
| |
| mutable borrow later used by call
为什么编译器提示 s.is_empty()
是不可变的借用?
我只是想返回一个 bool 值,这看起来不像是我在借用任何东西。我需要做哪些更改才能成功编译程序?
最佳答案
你可以试试这个:
fn main() {
let mut s = String::new();
let mut push_if = |b, some_str, string: &mut String| {
if b {
string.push_str(some_str);
}
};
push_if(s.is_empty(), "Foo", &mut s);
println!("{}", s);
}
关于rust - 不能借用 X 作为不可变的,因为它在可变闭包中也被借用为可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58721780/