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.