У меня есть ситуация, когда я хочу срез HashMaps с длиной среза, заданного константой. Как я могу инициализировать такого зверя?Как инициализировать фрагмент HashMaps?
use std::collections::HashMap;
use std::default::Default;
const LENGTH: usize = 10;
fn main() {
let f: [HashMap<String, u32>; LENGTH] = ???;
}
Я пробовал несколько версий вещей в ??? место:
Default::default()
[HashMap::new(); LENGTH]
[Default::default(); LENGTH]
iter::repeat(HashMap::new()).take(LENGTH).collect().as_slice()
Каждый дает мне различные ошибки:
test.rs:7:45: 7:61 error: the trait `core::default::Default` is not implemented for the type `[std::collections::hash::map::HashMap<collections::string::String, u32>; 10]` [E0277]
test.rs:7 let f: [HashMap<String, u32>; LENGTH] = Default::default();
^~~~~~~~~~~~~~~~
test.rs:7:45: 7:69 error: the trait `core::marker::Copy` is not implemented for the type `std::collections::hash::map::HashMap<collections::string::String, u32>` [E0277]
test.rs:7 let f: [HashMap<String, u32>; LENGTH] = [HashMap::new(); LENGTH];
^~~~~~~~~~~~~~~~~~~~~~~~
test.rs:7:45: 7:73 error: the trait `core::marker::Copy` is not implemented for the type `std::collections::hash::map::HashMap<collections::string::String, u32>` [E0277]
test.rs:7 let f: [HashMap<String, u32>; LENGTH] = [Default::default(); LENGTH];
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.rs:8:45: 8:107 error: the type of this value must be known in this context
test.rs:8 let f: [HashMap<String, u32>; LENGTH] = iter::repeat(HashMap::new()).take(LENGTH).collect().as_slice();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Есть ли какая-то особая магия, что я здесь отсутствует? Или я нахожу ошибку?
'[type; length] 'не является * срезом * - это * массив *. Массивы имеют фиксированный размер во время компиляции. Срезы имеют только известную длину во время выполнения. – Shepmaster
Возможный дубликат [Как инициализировать массив векторов?] (Http://stackoverflow.com/questions/27393166/how-do-ininialize-an-array-of-vectors) – Shepmaster