【发布时间】:2020-12-25 19:17:17
【问题描述】:
我正在尝试构建操作递归(树状)数据结构的 Rust 代码。天真地,可以将其定义为
struct ALinkedList {
value: i32,
next: Option<Box<Self>>
}
为了试验不同的内存布局并将算法设计与存储分开,我想将定义概括为类似
struct ALinkedList<D: Deref<Target=Self>> {
value: i32,
next: Option<D>
}
但是在尝试构造 ALinkedList 的实例时,我得到了
64 | let t: ALinkedList<Box<_>> = ALinkedList{value: 0, next: Some(Box::new(ALinkedList{value: 0, next: None}))};
| ^^^^^^^^^^^^^^^^^^^ cyclic type of infinite size
我的问题是:
- 是否可以让这些递归类型定义在 Rust 中工作?
- 如果不是,我可以使用哪些其他设计模式来表示树状结构,而无需硬编码其子项在内存中的存储和取消引用方式?
【问题讨论】:
标签: rust