rust 无法移出“req”,因为它是借用的

bnlyeluc  于 2023-11-19  发布在  其他
关注(0)|答案(3)|浏览(92)

我正在使用Rust和tiny-http。我创建了一个函数,在其中我正在处理请求的头部,然后发送响应:

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

字符串
它失败,并出现错误:

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


所以我有点理解req.headers()接受&self,它执行借用reqreq.respond()“移动”req,因为它接受self。我不知道我应该做什么,有人能帮助我理解吗?

j2qf4p5b

j2qf4p5b1#

在移动值之前,必须确保借用结束。要调整代码:

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

字符串
借用只会持续到函数顶部的块,所以在块结束后,你可以自由移动res

xmjla07d

xmjla07d2#

只需报价请求

fn handle_request(req: Request) {
    // add "&" before req
    let headers = &req.headers();
    // working with headers
    let res = Response::from_string("hi");
    req.respond(res);
}

字符串

gz5pxeao

gz5pxeao3#

我绞尽脑汁,发现你可以直接将借用的响应转换为拥有的。使用req.headers.to_owned()

相关问题