es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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 => {}
    }
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón de este comportamiento se debe al uso de referencias (&) y referencias mutables (&mut). Cuando usamos &mut en la declaración match, 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 tipo String dentro de Option. Por lo tanto, el tipo de n se infiere como String.

    Sin embargo, cuando eliminamos mut en Some(n), no estamos creando una referencia mutable al valor de tipo String. En su lugar, estamos creando una referencia inmutable a la propia Option. Esto significa que el tipo de n se infiere como &mut String, que es una referencia a un String mutable.

    En resumen, el uso de &mut en la declaración match afecta cómo se infiere el tipo de la variable comparada.

Comments are closed.