我有麻煩給一個結構成員變量是另一種類型的引用。這裏是我的結構和實現。引用元素在向量
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