我剛剛開始學習來自Java/JavaScript背景的Rust,所以請耐心等待,因爲我明顯錯過了我對生命時間的理解。我在生命中缺少什麼?
fn main() {
struct Appearance<'a> {
identity: &'a u64,
role: &'a str
};
impl<'a> PartialEq for Appearance<'a> {
fn eq(&self, other: &Appearance) -> bool {
self.identity == other.identity && self.role == other.role
}
};
let thing = 42u64;
let hair_color = "hair color";
let appearance = Appearance {
identity: &thing,
role: &hair_color
};
let another_thing = 43u64;
let other_appearance = Appearance {
identity: &another_thing,
role: &hair_color
};
println!("{}", appearance == other_appearance);
}
,因爲編譯器到達other_appearance
,告訴我,another_thing
不活足夠長的時間這是給我一個編譯錯誤。但是,如果我省略other_appearance
的創建,程序編譯並運行正常。爲什麼我得到這個錯誤?
這實際上很有趣,因爲'#[derive(PartialEq)]'創建的實例與OP的問題相同。 –
另一方面,由於這些值按照與它們聲明相反的順序被刪除,所以也可以通過交換順序來解決這個問題,即使用'other_appearance == appearance'而不是'appearance == other_appearance'。是的,Rust有幾個疣子... –
謝謝!我需要詳細說明語法,即使我在概念上理解你所說的:) –