Non è possibile utilizzare la sintassi [expr; N]
inizializzazione per i non Copy
tipi a causa della Modello di proprietà di Rust: esegue l'espressione una sola volta e, per i tipi non-Copy
, non può semplicemente copiare i byte N volte, ma devono essere di proprietà in un unico posto.
Sarà necessario uno:
scriverlo esplicitamente dieci volte: let v: [Vec<u8>; 10] = [vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![], vec![]]
, o
usare qualcosa come un vettore al posto della matrice: std::iter::repeat(vec![]).take(10).collect::<Vec<_>>()
.
fonte
2014-12-10 04:31:14
Capisco che Vec non implementa Copy e non è possibile a causa di ciò, ma perché? Dopo tutto un Vec è clonabile (o lo era almeno) e la maggior parte dei tipi lo sono, perché non usare il clone internamente? –
'Copia' riguarda un tipo di dati rappresentato con precisione dai suoi byte, in modo che la copia dei byte sia sufficiente per copiare il valore. Questo non funzionerà per 'Vec' perché i dati effettivi sono memorizzati in un'allocazione di heap ricca deve essere di proprietà esclusiva. Una copia di memoria di un 'Vec' violerebbe la sicurezza della memoria. –
Ho lo stesso problema nella gestione di un array di 256 vettori :( – mfirry