'x'的寿命不够长

时间:2017-01-06 21:32:40

标签: rust lifetime

我正在编写一个库,以更有效的方式学习Rust。这个简化的代码显示了我得到的编译器错误。它的设计可能也很糟糕:

struct Test<'a> {
    pub bar: Option<&'a str>,
}

impl<'a> Test<'a> {
    fn new() -> Test<'a> {
        Test { bar: None }
    }

    fn foobar(&mut self) -> Result<Option<&str>, String> {
        self.bar = match self.bar {
            Some(x) => Some(x),
            None => {
                match a_function() {
                    Ok(x) => Some(x.as_str()),
                    Err(e) => return Err(e),
                }
            }
        };
        Ok(self.bar)
    }
}

fn a_function() -> Result<String, String> {
    Ok("hello_world".to_string())
}
error: `x` does not live long enough
--> src/main.rs:15:35
   |
15 |                     Ok(x) => Some(x.as_str()),
   |                                   ^ does not live long enough
16 |                     Err(e) => return Err(e),
17 |                 }
   |                 - borrowed value only lives until here

我想我理解x过早超出范围的问题,但是如何将self.bar方法中的任何值绑定到foobar

0 个答案:

没有答案