study_example/object_oriented/
object_oriented_feature.rs1#[derive(Debug)]
2pub struct AveragedCollection {
3 list: Vec<i32>,
4 average: f64,
5}
6
7impl AveragedCollection {
8 fn update_average(&mut self) {
9 let total: i32 = self.list.iter().sum();
10 self.average = (total as f64) / (self.list.len() as f64);
11 }
12
13 pub fn remove(&mut self) -> Option<i32> {
14 let result = self.list.pop();
15 match result {
16 None => None,
17 Some(value) => {
18 self.update_average();
19 Some(value)
20 }
21 }
22 }
23
24 pub fn add(&mut self, value: i32) {
25 self.list.push(value);
26 self.update_average();
27 }
28}
29
30pub fn object_oriented_feature_study() {
37 let mut average_collect = AveragedCollection {
38 list: vec![12, 34, 53, 98],
39 average: (12 + 34 + 53 + 98) as f64 / 4 as f64,
40 };
41 println!("average_collect init: {:?}", average_collect);
42 average_collect.add(46);
43 println!("average_collect after add: {:?}", average_collect);
44 average_collect.remove();
45 println!("average_collect after remove: {:?}", average_collect);
46}