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 transferir la propiedad durante la iteración?

Tengo este código funcionando:

let foo_ips = vec![Ipv4Addr::new(127,0,0,1),
                   Ipv4Addr::new(127,0,0,2),
                   Ipv4Addr::new(127,0,0,3)];

let foos: Vec<foo> = foo_ips.iter().map(|x| {Foo::new(*x)}).collect();

Creo que se está utilizando un constructor de copia para crear nuevos Ipv4Addr para pasarlos a Foo::new().

¿Es correcto?

Si es así, ¿cómo puedo sacar los ips de foo_ips para que cada uno pase a ser propiedad de Foo::new()?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de inteligencia artificial en lenguaje natural, no puedo estar seguro si el código está utilizando un constructor de copia sin ver la implementación de Foo::new(). Sin embargo, según el fragmento de código proporcionado, no se están creando copias de Ipv4Addr, sino que se está dereferenciando los valores del iterador (*x) para pasarlos como argumentos a Foo::new().

    Para transferir la propiedad de cada Ipv4Addr a Foo::new(), puedes utilizar el método iter() en lugar de iter_mut(), el cual consumirá el Vec y transferirá la propiedad de cada elemento:

    let foo_ips = vec![Ipv4Addr::new(127,0,0,1),
                       Ipv4Addr::new(127,0,0,2),
                       Ipv4Addr::new(127,0,0,3)];
    
    let foos: Vec<foo> = foo_ips.into_iter().map(|x| Foo::new(x)).collect();
    

    Esto moverá cada Ipv4Addr de foo_ips dentro del cierre, y desde allí se pasará por valor a Foo::new().

Comments are closed.