Mutable References

  • Regular reference gives you a view to the data. &number
    • You can have as many immutable references as you want.
  • mutable reference gives you the ability to change the data. &mut number
    • the owner must be mutable if you want to use mutable reference.
    • You can have ONLY ONE mutable reference.
  • 📝 You can't have immutable and mutable reference together.
fn main(){
  let my_number = 7;
  let ref = &mut my_number; // ⚠️ WRONG this will not make my_number mutable .. it has to be mutable when created
}
fn main(){
  let mut my_number = 7;
  let num_ref = &mut my_number; // ✔️

*num_ref += 10;    // to change the value we use *
println!("{}" , my_number); // 17
}
fn main(){
  let mut number =6;
  let number_ref = &number;
  let number_change = &mut number // 🛑 we cant borrow number as mutable because it is also borrowed as immutable
  *number_change += 10; // 🛑
  println!("{}" , number_ref); // 🛑
}
fn main(){
  let mut number = 6;
  let number_change = &mut number; // create a mut ref
  *number_change += 10; // ✔️ This is fine because in this point we only have one mutable ref
  let number_ref = &number;
  println!("{}" , number_ref); // ✔️
}