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

Rust using higher order function on a struct embedded in another struct

我正在写一些模拟来观察大学部门的招聘实践。因此,我在 struct. 中包含的一个系中有不同的教授组。该系中有多个组。因此,每个教授组由不同教授级别的成员组成:正教授、副教授或助理教授。

为了将所有教授分组到同一级别,我创建了另一个名为 DepartmentLevelsstruct,其中包含对 ProfessorGroups 结构向量的引用。现在每个 ProfessorGroup 都有一个属性 current_number 表示该组中教授的数量。

所以我试图在 DepartmentLevels 结构上编写一个方法,该方法对向量中每个组的教授计数进行求和,从而计算出该级别的教授总数。由于 vector 是一个迭代器,我想我可以使用更高阶的函数。问题是试图让高阶函数正常工作以访问嵌套 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
    }
}

我收到的错误消息是:

error: expected one of `,`, `::`, or `:`, found `.`
  --> src/DepartmentLevels/DepartmentLevels.rs:18:55
   |
18 |         let result = self.professors.iter().fold(0,|sum, self.professors.current_number| sum + self.professors.current_number);
   |                                                       ^ expected one of `,`, `::`, or `:` here

error[E0424]: expected unit struct/variant or constant, found closure capture `self`

闭包中竖线之间的符号是参数名称,而不是任意表达式。

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)
}