匹配字符串:无法移出借来的内容

W.K*_*K.S 3 rust

req.url.fragment是可选的String.如果它有一个值,我想将该值复制到其中fragment,否则我想分配一个空字符串.我一直收到错误cannot move out of borrowed content.

我该如何解决这个问题?

fn fb_token(req: &mut Request) -> IronResult<Response> {
    let fragment = match req.url.fragment {
        Some(fragment) => fragment,
        None => "".to_string(),
    };

    Ok(Response::with((status::Ok, fragment)))
}
Run Code Online (Sandbox Code Playgroud)

She*_*ter 11

这取决于您要对结构中的现有字符串执行的操作.

let fragment = match req.url.fragment {
    Some(fragment) => fragment,
    None => "".to_string(),
};
Run Code Online (Sandbox Code Playgroud)

在此代码中,您将移出 String req.url.fragment,但这将使其处于未定义状态.这是一件坏事,Rust阻止你这样做!

如错误消息所示:

防止移动,使用ref fragmentref mut fragment通过引用捕获值

如果要将字符串保留在原来的位置并返回副本,则可以获取引用然后克隆它:

let fragment = match req.url {
    Some(ref fragment) => fragment.clone(),
    None => "".to_string()
};
Run Code Online (Sandbox Code Playgroud)

如果要将现有字符串保留为a None,则可以使用take:

let fragment = match req.url.take() {
    Some(fragment) => fragment,
    None => "".to_string()
};
Run Code Online (Sandbox Code Playgroud)

更短,你可以使用unwrap_or_else:

let fragment = req.url.take().unwrap_or_else(String::new);
Run Code Online (Sandbox Code Playgroud)