3
最近,我这是通过简单地改变'&self'和'&'a self'有什么区别?
impl<'a> Foo<'a> {
fn foo(&'a self, path: &str) -> Boo<'a> { /* */ }
}
到
impl<'a> Foo<'a> {
fn foo(&self, path: &str) -> Boo { /* */ }
}
它并没有按照我的理解是有意义解决的错误,因为我认为第二个版本是完全一样的第一个应用了终生的elision。
在情况下,我们引入一个新的生存时间,这似乎是根据从nomicon这个例子的情况下的方法。
fn get_mut(&mut self) -> &mut T; // elided
fn get_mut<'a>(&'a mut self) -> &'a mut T; // expanded
那么,这和我的第一个代码被剪断有什么区别。
第二个变体告诉'嘘<'b>'要活,只要借'和'B self'编译器。那就是当'Boo <'b>'不再处于被采用的词汇范围时,'self'不再被借用。 – red75prime
第一个变体将结构'Foo <'a>'的借用寿命和'自我'联系在一起。如果'Foo <'a>''[invariant](https://doc.rust-lang.org/nomicon/subtyping.html#variance)over''a',这意味着'self'应该保持借用,只要''了'。 – red75prime
我加了一点解释为什么'Foo'的变化会影响你的代码。 – red75prime