I have struct Board
which contains an element rows: [[&'a mut Tile; 7];7]
I have no idea how to initialise that by a constructor in impl Board {}
block because of lifetimes, so I've tried to initialise it in the main
function.
Sadly, rows = [[&mut Tile::def(); 7]; 7]
doesn't work because Rust wants to copy the reference &mut Tile::def()
. (Where Tile::def()
is a constructor for Tile
).
Is there a way to initialise this array such that every element (i,j) is a reference to a distinct Tile
?
Currently, the only solution that works is
let mut rows = [[&mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def()],[&mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def()],[&mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def()],[&mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def()],[&mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def()],[&mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def()],[&mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def(), &mut Tile::def()]];
let board = Board { rows : rows, ...};
which is unsatisfactory for obvious reasons.
What I have tried was creating a function that transforms [[Tile; 7]; 7]
into the desired array, but I encountered impossibility of borrowing mutably elements of this array multiple times.