引用结构的枚举变体

问题描述 投票:0回答:1

我是生锈新手。我有这个代码:

enum Foo {
    F1 { x: Vec<Foo>, y: i32 },
    F2 { x: &Bar },
}

struct Bar {
    x: i32,
    y: Vec<Foo>,
}

显然,这不会编译,因为我必须给出一个生命周期参数,这导致了这个:

enum Foo<'a> {
    F1 { x: Vec<Foo<'a>>, y: i32 },
    F2 { x: &'a Bar<'a> },
}

struct Bar<'a> {
    x: i32,
    y: Vec<Foo<'a>>,
}

像这样使用生命周期是个好习惯吗?在这种情况下,我需要

F2
来引用
Bar

struct rust enums lifetime
1个回答
1
投票

您编写的生命周期注释适合这种情况。 (在其他情况下,最好使用多个生命周期参数,例如在处理

&mut
引用时,以避免过度约束生命周期,但情况并非如此。)

但是,可能实际上您根本不想使用

&Bar
,而是使用其他类型,例如拥有
Box<Bar>
结构的
Rc<Bar>
Bar
。在这种情况下,您“不会”需要生命周期注释。是否是这种情况取决于这些结构的构造和使用方式,因此不能仅通过类型声明来确定 - 但如果是这样,当您尝试使用它们时,您会通过编译错误找到答案。

© www.soinside.com 2019 - 2024. All rights reserved.