summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch4/ch4-rc-refcell-groundstation.rs
blob: d0e27eee56e140ce885b6ffe19a65cbd25f777c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use std::rc::Rc;
use std::cell::RefCell;

#[derive(Debug)]
struct GroundStation {
  radio_freq: f64 // Mhz
}

fn main() {
  let base: Rc<RefCell<GroundStation>> = Rc::new(RefCell::new(
    GroundStation {
      radio_freq: 87.65
    }
  ));

  println!("base: {:?}", base);

  { // introduce a new scope
    let mut base_2 = base.borrow_mut();
    base_2.radio_freq -= 12.34;
    println!("base_2: {:?}", base_2);
  }

  println!("base: {:?}", base);

  let mut base_3 = base.borrow_mut();
  base_3.radio_freq += 43.21;

  println!("base: {:?}", base);
  println!("base_3: {:?}", base_3);
}