Skip to content

Instantly share code, notes, and snippets.

@gusdelact
Last active October 20, 2019 19:16
Show Gist options
  • Save gusdelact/40b12c25ae1ead2404c01539ddd3316f to your computer and use it in GitHub Desktop.
Save gusdelact/40b12c25ae1ead2404c01539ddd3316f to your computer and use it in GitHub Desktop.
//En Rust, si hay una diferencia entre declarar una estructura
//que implementa los trait Copy y Clone
//este ejemplo usarlo sin quitar comentarios o poniendo comentarios
struct Estructura {
campo01 : u32,
campo02 : f64,
}
/*impl Copy for Estructura { }
impl Clone for Estructura {
fn clone(&self) -> Estructura {
*self
}
}*/
fn fn00(par01: Estructura ) {
let numero = f64::from(par01.campo01) + par01.campo02;
}
fn fn01(par01: &Estructura ) {
let numero = par01.campo01 as f64 + par01.campo02;
}
fn main () {
let estruct = Estructura{campo01:5,campo02:31.14};
let primero = estruct;
// let segundo = estruct;
//la estructura ya fue prestada a primero, esto no se puede hacer
//fn01(&estruct);
//para llamar a fn00, Estructura debe implantar el trato Copy y Clone
//fn00(primero);
//fn00(segundo);
//no se puede llamar a estructura sin prestar primero01
//fn01(primero);
fn01(&primero);
// fn01(&segundo);
//println!("{:p},{:p},{:p}",&estruct,&primero,&segundo);
println!("{:p} {} {}",&primero,
std::mem::size_of::<Estructura>(),std::mem::size_of_val(&primero) );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment