返回本地String作为选项<&str>

sbw*_*sbw 0 rust

我想编写一个接收&str参数并返回的函数Option<&str>.我写了这个:

fn f(text: &str) -> Option<&str> {
    if // some condition {
        return None;
    }

    let mut res = String::new();
    // write something into res.

    // return res
    Some(&res[..])
}
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

res 活得不够久.

解决这个问题的最佳解决方案是什么?

fjh*_*fjh 6

您无法&str将该点返回到局部String变量中.这样做意味着您只返回一个悬空指针,因为函数返回时String(res在您的代码中)会被销毁.

解决问题的最佳方法可能是返回a Option<String>,即返回拥有的字符串而不是字符串切片.调整代码,最终可能会出现以下情况:

fn f(text: &str) -> Option<String> {
    if // some condition {
        return None;
    }

    let mut res = String::new();
    // write something into res.

    Some(res)
}
Run Code Online (Sandbox Code Playgroud)