簡體   English   中英

為什么在我引用的結構上未使用生命周期?

[英]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 PersonPersonBuilder刪除它:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM