我想用给定的规则自动初始化一组自定义的结构。
对于实现Copy
的基本类型和类型,我会做let x: [u8; 5] = [0; 5];
之类的事情,但是使用无法派生Copy
的类型我必须做其他事情。
我可能会记下整个列表,但这非常不方便,特别是如果我只想要稍后会改变的虚拟值,相当于用零初始化整数数组。
我尝试过像这样的for
循环
use std::collections::LinkedList;
enum CourseType {
Dummy1,
Dummy2,
}
struct Week {
number: u64,
days: [Day; 5], //Mo-Fr
}
struct Day {
courses: LinkedList<Course>, // LinkedList prevents Copy
}
struct Course {
beginning: u8,
courseType: CourseType,
}
fn get_weeks() -> Option<Vec<Week>> {
let mut weeks = Vec::with_capacity(20);
for i in 1..14 {
let week = Week {
number: i,
days: {
let mut ret: [Day; 5]; // definition of the array
for i in 0..4 {
// loop to initialize
ret[i] = Day {
courses: LinkedList::new(),
} //error[E0381]
}
ret //error[E0381]
},
};
weeks.push(week);
}
Some(weeks)
}
如片段中所述,我通过这种方式“初始化”得到错误[E0381]:
error[E0381]: use of possibly uninitialized variable: `ret`
--> src/main.rs:31:21
|
31 | / ret[i] = Day {
32 | | courses: LinkedList::new(),
33 | | }
| |_____________________^ use of possibly uninitialized `ret`
error[E0381]: use of possibly uninitialized variable: `ret`
--> src/main.rs:35:17
|
35 | ret
| ^^^ use of possibly uninitialized `ret`
我如何初始化这种数组呢?
在这种情况下,我有一个固定大小的数据,因为(工作)周只有5天。使用动态类型,如矢量,似乎是不精确的。我以前尝试过元组,但是我有一个类似的问题,我不得不迭代元组索引。似乎不可能(使用变量)使用变量(类似tuple.index
而不是tuple.3
)来处理索引。
也许我必须使用某种切片(&[Day; 5]
)而不是数组,但我想我对Rust的理解还不够。