我是生锈新手。我有这个代码:
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
。
您编写的生命周期注释适合这种情况。 (在其他情况下,最好使用多个生命周期参数,例如在处理
&mut
引用时,以避免过度约束生命周期,但情况并非如此。)
但是,可能实际上您根本不想使用
&Bar
,而是使用其他类型,例如拥有Box<Bar>
结构的Rc<Bar>
或Bar
。在这种情况下,您“不会”需要生命周期注释。是否是这种情况取决于这些结构的构造和使用方式,因此不能仅通过类型声明来确定 - 但如果是这样,当您尝试使用它们时,您会通过编译错误找到答案。