在嵌入另一个结构的结构上使用高阶函数生锈

时间:2017-05-09 00:47:09

标签: struct rust fold

我正在编写一些模拟来查看大学部门的招聘实践。所以我在一个部门中有不同的教授组,我在struct.中包含该部门中有多个组。因此,每个教授组都由不同教授级别的成员组成:全职,副教授或助理教授。

为了对所有同级别的教授进行分组,我创建了另一个名为struct的{​​{1}},其中包含对DepartmentLevels结构的向量的引用。现在每个ProfessorGroups都有一个属性ProfessorGroup,表示该组中的教授人数。

所以我试图在current_number结构上编写一个方法,该方法总结了向量中每个组的教授计数 - 因此也就是那个级别的教授总数。由于向量是一个迭代器,我想我可以使用更高阶函数。问题是试图让高阶函数正常工作以访问嵌套DepartmentLevels我希望有人能指出方向。

struct.

我收到的错误消息是:

#[derive(Clone, Copy, Debug)]
pub struct ProfessorGroup<'a> {
    name: &'a str,
    gender: Gender,
    level: ProfessorRank,
    attrition_rate:f64,
    promotion_rate:f64,
    hiring_rate:f64,
    current_number:i32,
}

#[derive(Clone, Copy, Debug)]
pub struct DepartmentLevels<'a> {
    name: &'a str,
    professors: &'a Vec<ProfessorGroup<'a>>,
    number_of_vacancies: i32,
    number_of_promotions: i32,
    number_of_hires: i32,

impl<'a> DepartmentLevels<'a> {
    pub fn get_professor_count(&mut self) -> i32 { //PROBLEM BELOW
        let result = self.professors.iter().fold(0,|sum, self.professors.current_number| sum + self.professors.current_number);
        result
    }
}

1 个答案:

答案 0 :(得分:2)

闭包中垂直条之间的符号是参数名,而不是任意表达式。

fold将两个参数传递给闭包:当前累加器和迭代器发出的项(在本例中是对向量中项的引用)。这里第二个参数的一个好名字是professor_group。然后,我们可以使用名称professor_group对当前ProfessorGroup执行任何操作,例如访问其中一个字段。

pub fn get_professor_count(&mut self) -> i32 {
    self.professors.iter().fold(0, |sum, professor_group| sum + professor_group.current_number)
}