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