- 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.
¡