我有麻烦给一个结构成员变量是另一种类型的引用。这里是我的结构和实现。引用元素在向量
struct Player<'a> {
current_cell: &'a Cell,
}
impl<'a> Player<'a> {
pub fn new(starting_cell: &'a Cell) -> Player<'a> {
Player { current_cell: starting_cell }
}
}
球员有当前Cell
,他们是在参考这里是我的Game
结构及其实现:
struct Game {
is_running: bool,
cells: Vec<Cell>,
}
impl Game {
pub fn new() -> Game {
let cells = construct_cells();
let player = Player::new(cells[0]);
Game {
is_running: false,
cells: cells,
}
}
}
cells
是Cell
矢量秒。当我创建游戏时,我在construct_cells()
中创建了一个单元格矢量,然后在第一个单元格处启动播放器。我得到的错误是:
expected &Cell, found struct `Cell`
我可以看到,我不是路过的参考,当我创建了Player
,但如果我更改参数来&cells[0]
然后骂我借用整个向量和然后在创建Game
结构时尝试再次使用它。发生什么了?我该如何给玩家提供一个Cell
?
你对引用(或指针)是什么有很好的理解,尤其是什么*悬挂引用*(或指针)是什么?如果你给朋友一张带有你的地址的纸条(123 Main St.),然后**你移动了**,会发生什么?如果你的朋友刚刚出现并开始与你曾经居住过的房子里的人谈话,那么这个房子的新主人会如何感觉到,就好像他们一样? – Shepmaster
@Shepmaster我知道什么是悬挂指针。我想我只是没有意识到这个解决方案可以允许一个。那么我将如何获得相同的结果呢?我正在尝试做什么? – Dooskington
*我只是没有意识到这个解决方案可以允许一个* - 这就是为什么Rust是一个美妙的语言,国际海事组织。当你将'cells'从局部变量移动到'Game'结构体时,你已经无效化了向量中的所有引用,比如你给'player'的引用。像C或C++这样的语言可以让你做到这一点,AFAIK,并让代码在运行时崩溃。很难说出你真正想做什么,因为“玩家”从不使用。 – Shepmaster