我正在编写一些模拟来查看大学部门的招聘实践。所以我在一个部门中有不同的教授组,我在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
}
}
答案 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)
}