![](/img/trans.png)
[英]Why do I get a lifetime error when I use a mutable reference in a struct instead of an immutable reference?
[英]Why is a lifetime unused on a struct that I have a reference to?
以下內容無法編譯:
struct Person<'z> {
street_address: String,
postcode: String,
city: String,
company_name: String,
position: String,
annual_income: usize,
}
struct PersonBuilder<'z> {
person: &'z Person<'z>,
}
impl<'z> PersonBuilder<'z> {
fn new() -> PersonBuilder<'z> {
PersonBuilder {
person: Person {
street_address: "".to_string(),
postcode: "".to_string(),
city: "".to_string(),
company_name: "".to_string(),
position: "".to_string(),
annual_income: 0,
},
}
}
}
error[E0392]: parameter `'z` is never used
--> src/main.rs:1:15
|
1 | struct Person<'z> {
| ^^ unused type parameter
|
= help: consider removing `'z` or using a marker such as `std::marker::PhantomData`
但這不是真的嗎? 我的意思是, PersonBuilder
保留對Person<'z>
的引用作為Person<'z>
,當我使用PersonBuilder::new()
實例化它時,顯然類型參數正在起作用以將兩個生命周期聯系在一起。 那么這是怎么回事?
這里的編譯器是完全正確的。 'z
不在Person
。 從Person
和PersonBuilder
刪除它:
struct Person { /* ... */ }
struct PersonBuilder<'z> {
person: &'z Person,
}
一個你刪除了那個, 你試圖做的是不可能的 。 請參見是否有任何方法可以返回對在函數中創建的變量的引用? 。 從您的代碼中刪除所有生存期和引用,它將起作用。
PersonBuilder
保留對人的引用
是的,這就是&Person
。
作為
Person<'z>
Person<'z>
表示Person
結構包含指定生存期的引用。 &'z Person
是指具有指定壽命的人。
使用
PersonBuilder::new()
實例化它,顯然是類型參數
您指的是哪個“類型參數”,因為在此代碼中我看不到。 雖然這是真的,壽命和類型參數都種仿制葯,他們是不同類型的仿制葯,而不是一視同仁。
您可能也對Default
特質感興趣:
#[derive(Debug, Default)]
struct Person { /* ... */ }
impl PersonBuilder {
fn new() -> PersonBuilder {
PersonBuilder {
person: Person::default(),
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.