Как частично инициализировать ArrayVec? - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужны структуры с фиксированным максимальным размером, поэтому очевидным выбором будет arrayvec crate .Тем не менее, я застрял, когда ArrayVec является членом структуры, которая впоследствии должна быть частично инициализирована:

use arrayvec::ArrayVec; // 0.4.7

#[derive(Debug)]
struct Test {
    member_one: Option<u32>,
    member_two: ArrayVec<[u16; 5]>,
}

pub fn main() {
    let mut test = Test {
        member_one: Some(45678),
        member_two: [1, 2, 3], // <- What to do here to initialise only 3 elements?
    };

    print!("{:?}", test);
}

Я хотел бы инициализировать первые три элемента ArrayVec, так каквполне способен удерживать любое количество элементов от нуля до 5 (в моем примере), но я не могу понять, как это сделать.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вы можете собрать в ArrayVec из итератора:

let mut test = Test {
    member_one: Some(45678),
    member_two: [1, 2, 3].iter().cloned().collect(),
};
0 голосов
/ 14 декабря 2018

ArrayVec не предлагает одношаговый метод для этого.Вместо этого создайте ArrayVec и затем добавьте к нему значения любым из способов, которыми вы можете добавить значения:

let mut member_two = ArrayVec::new();
member_two.extend([1, 2, 3].iter().cloned());
let test = Test {
    member_one: Some(45678),
    member_two, 
};
...