因为它是借来的,所以不能搬出`req`

fra*_*nza 5 rust

我正在玩Rust和tiny-http.我创建了一个函数,其中我正在弄乱请求的标题然后发送响应:

fn handle_request(req: Request) {
    let headers = req.headers();
    // working with headers
    let res = Response::from_string("hi");
    req.respond(res);
}
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:

main.rs:41:5: 41:8 error: cannot move out of `req` because it is borrowed
main.rs:41     req.respond(res);
               ^~~
main.rs:27:19: 27:22 note: borrow of `req` occurs here
main.rs:27     let headers = req.headers();
                             ^~~
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

所以我有点理解,req.headers()接受&self哪个进行借用req和req.respond()"移动",req因为它接受self.我不确定我应该在这做什么,有人可以帮我理解吗?

fjh*_*fjh 6

在移动值之前,您已确保借用已结束.要调整您的代码:

fn handle_request(req: Request) {
    {
        let headers = req.headers();
        // working with headers
    }
    let res = Response::from_string("hi");
    req.respond(res);
}
Run Code Online (Sandbox Code Playgroud)

借用只会持续到函数顶部的块,因此在块结束后,您可以自由移动res.

  • 这不会消除借款,只会降低价值. (3认同)