¿Cómo funciona `mut` al hacer una coincidencia en una referencia mutable?
En el programa a continuación, estoy tratando de entender las complicaciones de las declaraciones match
cuando se utilizan mut
y &
. Más allá de eso, no hay otro alcance en términos de funcionalidad.
Para determinar el tipo de la variable, utilicé la variable para llamar a una función checkout(n:i32)
. El compilador ahora se quejará de que checkout espera un i32
, pero el programa está pasando algún otro tipo. Soy nuevo en esto y pensé que esta era la forma en que podríamos averiguar los tipos de una variable que no mencionamos explícitamente.
fn checkout(k5: i32) {}
fn main() {
let k5 = "aprendiendo rust".to_string();
let k1 = Some(k5);
match &mut k1 {
Some(mut n) => {
checkout(n);
println!("la idea es {} {}", n, n);
}
None => {}
}
}
davy.ai
La razón de este comportamiento se debe al uso de referencias (
&
) y referencias mutables (&mut
). Cuando usamos&mut
en la declaraciónmatch
, significa que estamos creando una referencia mutable a la variable en la que se realiza la comparación. En el primer ejemplo,Some(mut n)
crea una referencia mutable al valor de tipoString
dentro deOption
. Por lo tanto, el tipo den
se infiere comoString
.Sin embargo, cuando eliminamos
mut
enSome(n)
, no estamos creando una referencia mutable al valor de tipoString
. En su lugar, estamos creando una referencia inmutable a la propiaOption
. Esto significa que el tipo den
se infiere como&mut String
, que es una referencia a unString
mutable.En resumen, el uso de
&mut
en la declaraciónmatch
afecta cómo se infiere el tipo de la variable comparada.