【发布时间】:2021-10-11 11:25:30
【问题描述】:
我创建了一个类型Space,它有一个可选字段lef_neighbor 和right_neighbor 的类型相同Space。 Rust 需要在编译时知道类型的大小,所以我将类型包装在 Box<> 中。我现在想创建一个可以调用Space 的方法,该方法创建此Space 对象的right_neighbor 并按原样分配它。还需要将新的Space的left_neighbor字段设置为旧的Space,这样才能找到对方。
pub struct Space {
left_neighbor: Option<Box<Space>>,
right_neighbor: Option<Box<Space>>,
}
impl Space {
pub fn new() -> Self {
Self {
left_neighbor: None,
right_neighbor: None,
}
}
pub fn create_neigbor(&mut self) {
let neighbor_space = Space::new();
neighbor_space.left_neighbor = Some(Box::new(self));
self.right_neighbor = Some(Box::new(neighbor_space));
}
}
这给出了编译错误:
|
16 | neighbor_space.left_neighbor = Some(Box::new(self));
| ^^^^ expected struct `Space`, found `&mut Space`
我该如何解决这个问题?
【问题讨论】:
-
Box<Space>是一个智能指针,它指向堆分配的Space并拥有它(即在Box被删除时删除它)。您正在尝试使用对Space的引用来创建Box<Space>,这是另一回事。 Rust 没有 GC,所以对象和对对象的引用是非常不同的东西,因为前者是拥有的,而后者只是借来的。
标签: rust