2017-05-09 3 views
0

私は、大学の部署の採用実践を見るためにいくつかのシミュレーションを書いています。だから私は私が含む部門の教授の異なるグループを持っているstruct.部門には複数のグループがあります。したがって、各教授グループは、教授ランクの異なるメンバー、すなわち、フル、アソシエイト、またはアシスタントの教授で構成されています。他の構造体に埋め込まれた構造体の高次関数を使用している錆

すべての教授を同じランクにグループ化するには、構造体のベクトルへの参照を含むDepartmentLevelsという別のstructを作成しました。各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 
    } 
} 

私は取得していますエラーメッセージは次のとおりです。

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` 

答えて

2

閉鎖中の縦棒の間のシンボルはパラ​​メータ名ではなく、任意の式です。

foldは、現在のアキュムレータとイテレータによって放出されたアイテム(この場合はベクトル内のアイテムへの参照)を2つの引数としてクロージャに渡します。ここで第2引数の良い名前はprofessor_groupです。次に、professor_groupという名前を使用して、現在のProfessorGroupで操作を実行できます。そのフィールドの1つにアクセスします。

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

大丈夫です。私はそのショットを与えるだろう。これの方向性をありがとう。 – krishnab

関連する問題