这是代码
fn main() { let n = String::from("rust"); let myname; { let obj = AA{ name: &n }; myname = obj.get_name(); } println!("{}", myname) } struct AA<'a>{ name: &'a str } impl <'a> AA<'a>{ fn get_name(&self) -> & str{ return &self.name; } } 按照文档来说,下面的报错能理解,因为 myname 的生命周期应该和 obj 是一样的,出了作用范围就被编译器检查出来了
error[E0597]: `obj` does not live long enough --> src/main.rs:14:18 | 14 | myname = obj.get_name(); | ^^^^^^^^^^^^^^ borrowed value does not live long enough 15 | } | - `obj` dropped here while still borrowed 16 | println!("{}", myname) | ------ borrow later used here 但是,如果我把方法返回值写明返回的生命周期,如下
impl <'a> AA<'a>{ fn get_name(&self) -> &'a str{ return &self.name; } } 这样能正常运行
warning: `hello_cargo` (bin "hello_cargo") generated 4 warnings Finished dev [unoptimized + debuginfo] target(s) in 0.45s Running `target/debug/hello_cargo` rust 疑问:为什么会产生这样的区别,按照生命周期省略规则的第三条规则来说默认的返回生命周期是&self 的,也就是 obj 的,这个生命周期和'a 是不一样的吗
