struct - 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
.
解决方案
您编写的生命周期注释适用于这种情况。(在其他情况下,最好使用多个生命周期参数,例如在处理&mut
引用时,以避免过度约束生命周期,但情况并非如此。)
但是,可能您实际上根本不想使用 a ,而是拥有该结构的&Bar
其他类型,例如Box<Bar>
or 。在这种情况下,您将不需要生命周期注释。是否是这种情况取决于这些结构的构造和使用方式,因此不能仅从类型声明中确定——但是当您尝试使用它们时,您会通过编译错误发现,如果是的话。Rc<Bar>
Bar
推荐阅读
- google-app-engine - 如何在谷歌云负载均衡器后面发出 https 请求
- c# - 插入/更新后立即在 datagridview 中显示数据
- javascript - TypeError: Object.defineProperty 在 Function.defineProperty (
) 使用玩笑时 - listview - 如何使用 fmx listview 编辑从查询中加载的字段
- python - 在 Python 3 和 SQLite 中使用多个“WHERE IN”,同时使其可读
- data-structures - hashing vs hash function,不知道有什么区别
- docker - 从 anaconda 构建环境时,成功构建的 docker 映像不会运行
- c# - 将文件从一个文件夹复制到根目录
- apache-spark - 在 Pyspark 上高效实现 SOM(自组织地图)
- linux - ls 容器内的排序顺序