我正在编写一个库,以更有效的方式学习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
?