Translate

sábado, 5 de agosto de 2023

Préstamos compartidos y únicos

 Rust impone restricciones en las formas en que puede tomar prestados valores:

  • Puede tener uno o más valores &T en un momento dado, o
  • Puede tener exactamente un valor de &mut T.
Por ejemplo: 

fn main() {
    let mut a: i32 = 10;
    let b: &i32 = &a;

    {
        let c: &mut i32 = &mut a;
        *c = 20;
    }

    println!("a: {a}");
    println!("b: {b}");
}

Si tratamos de correr este programa: 

$ cargo run
   Compiling hello_cargo v0.1.0 
error[E0502]: cannot borrow `a` as mutable because it is also borrowed as immutable
  --> src/main.rs:6:27
   |
3  |     let b: &i32 = &a;
   |                   -- immutable borrow occurs here
...
6  |         let c: &mut i32 = &mut a;
   |                           ^^^^^^ mutable borrow occurs here
...
11 |     println!("b: {b}");
   |                   - immutable borrow later used here

For more information about this error, try `rustc --explain E0502`.
error: could not compile `hello_cargo` due to previous error

El código anterior no compila porque a se toma prestado como mutable (a través de c) e inmutable (a través de b) al mismo tiempo.
¡