Syntax 如何部分初始化ArrayVec?
我需要具有固定最大尺寸的结构,因此显而易见的选择似乎是。但是,当Syntax 如何部分初始化ArrayVec?,syntax,rust,initialization,Syntax,Rust,Initialization,我需要具有固定最大尺寸的结构,因此显而易见的选择似乎是。但是,当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
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::arrayvec;//0.4.7
#[导出(调试)]
结构测试{
成员一:选择,
成员二:ArrayVec,
}
pub fn main(){
让mut测试=测试{
成员一:一些(45678),
成员二:[1,2,3],//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,
};
您可以从迭代器收集到ArrayVec
:
let mut test = Test {
member_one: Some(45678),
member_two: [1, 2, 3].iter().cloned().collect(),
};
看起来ArrayVec严重短缺,但你的建议就行了。太好了,效果很好-省去了我很多头疼!新年快乐!