私の実装は面倒すぎると感じており、この単純なことを実装するためのより良い方法があると思います。
ゲーム ボードを表す構造体があり、Grid
グリッドにセルを追加するメソッドがあります。このメソッド ( add_cell
) は、セルを追加する前にグリッドにセルが既に存在するかどうかを確認します。
struct Cell {
// A simplified version with only one coordinate
position: i8,
}
struct Grid {
// List of cells in the grid
cells: Vec<Rc<Cell>>,
}
impl Grid {
// Add a cell in to the grid
pub fn add_cell(&mut self, cell: Cell) {
let is_not_yet_in;
{
if self.cells.iter().find(|&c| c.position == cell.position).is_some() {
is_not_yet_in = false;
} else {
is_not_yet_in = true;
}
}
if is_not_yet_in {
self.cells.push(Rc::new(cell).clone());
}
}
}
の可変/不変借用でのコンパイルエラーを回避するために、宣言の後に偽のスコープを配置しました。とにかく、このトリックは別のアプローチを使用することを避けることができると思います。is_not_yet_in
self.cells