首页 > 解决方案 > Rust - 引用结构的枚举变体

问题描述

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

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.

标签: structrustenumslifetime

解决方案


您编写的生命周期注释适用于这种情况。(在其他情况下,最好使用多个生命周期参数,例如在处理&mut引用时,以避免过度约束生命周期,但情况并非如此。)

但是,可能您实际上根本不想使用 a ,而是拥有该结构的&Bar其他类型,例如Box<Bar>or 。在这种情况下,您不需要生命周期注释。是否是这种情况取决于这些结构的构造和使用方式,因此不能仅从类型声明中确定——但是当您尝试使用它们时,您会通过编译错误发现,如果是的话。Rc<Bar>Bar


推荐阅读