Rust 在嵌入另一个结构的结构上使用高阶函数
Rust using higher order function on a struct embedded in another struct
我正在写一些模拟来观察大学部门的招聘实践。因此,我在 struct.
中包含的一个系中有不同的教授组。该系中有多个组。因此,每个教授组由不同教授级别的成员组成:正教授、副教授或助理教授。
为了将所有教授分组到同一级别,我创建了另一个名为 DepartmentLevels
的 struct
,其中包含对 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)
}
我正在写一些模拟来观察大学部门的招聘实践。因此,我在 struct.
中包含的一个系中有不同的教授组。该系中有多个组。因此,每个教授组由不同教授级别的成员组成:正教授、副教授或助理教授。
为了将所有教授分组到同一级别,我创建了另一个名为 DepartmentLevels
的 struct
,其中包含对 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)
}