初始化固定大小的结构数组

时间:2017-11-19 16:52:05

标签: arrays struct initialization rust

我想用给定的规则自动初始化一组自定义的结构。

对于实现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的理解还不够。

0 个答案:

没有答案