cargo add curl
use curl::easy::Easy;
fn main() {
let mut dst = Vec::new();
let mut easy = Easy::new();
// {
easy.url("https://www.rust-lang.org/").unwrap();
let mut transfer = easy.transfer();
transfer
.write_function(|data| {
dst.extend_from_slice(data);
Ok(data.len())
})
.unwrap();
transfer.perform().unwrap();
// }
println!("{:?}", dst);
}
错误信息
10 | .write_function(|data| {
| ------ mutable borrow occurs here
11 | dst.extend_from_slice(data);
| --- first borrow occurs due to use of `dst` in closure
...
18 | println!("{:?}", dst);
| ^^^ immutable borrow occurs here
19 | }
如果我把{}
解开注释就能编译通过,这是为什么
1
共 3 条评论, 1 页
评论区
写评论原来如此, 学到了
--
👇
Bai-Jinlin: 因为Transfer实现了Drop,在println之后才出作用域,write_function代码是这样
相当于transfer变量内含有dst的可变引用,所以在drop transfer之前不能使用dst,解决方法你也知道,要么开个scope,要么在println之前调用core::mem::drop(transfer)。
因为Transfer实现了Drop,在println之后才出作用域,write_function代码是这样
相当于transfer变量内含有dst的可变引用,所以在drop transfer之前不能使用dst,解决方法你也知道,要么开个scope,要么在println之前调用core::mem::drop(transfer)。
transfer应该是借用了dst的可变借用,因此你没有{}的时候,transfer没有被释放,所以一直持有dst的可变借用,因此println!无法再借用dst的不可变借用。猜的。