Transferencias parciales

Dentro de la [desestructuración] de una sola variable, se pueden utilizar al mismo tiempo los vínculoes de patrones por transferencia y por referencia. Hacer esto resultará en una transferencia parcial de la variable, lo que significa que partes de la variable se transferirán mientras que otras partes permanecen. En tal caso, la variable padre no se puede usar posteriormente como un todo, sin embargo, las partes a las que solo se hace referencia (y no se transfieren) aún se pueden usar.

fn main() {
    #[derive(Debug)]
    struct Persona {
        nombre: String,
        edad: u8,
    }

    let persona = Persona {
        nombre: String::from("Alicia"),
        edad: 20,
    };

    // `nombre` es transferido, pero `edad` es referenciado
    let Persona { nombre, ref edad } = persona;

    println!("La edad de la persona es {}", edad);

    println!("El nombre de la persona es {}", nombre);

    // ¡Error! préstamo de valor parcialmente transferido: se produce una transferencia
    // parcial de persona
    //println!("La estructura persona es {:?}", persona);

    // No se puede usar `persona` pero se puede usar `persona.edad` ya que no se
    // transfiere
    println!("La edad de la estructura persona es {}", persona.edad);
}

Ve también

desestructuración