Introdução
Neste laboratório, aprendemos sobre o uso do trait Clone em Rust para fazer cópias de recursos, como structs, usando o método .clone(). O trait Clone nos permite criar cópias independentes de recursos, e podemos usar o método .clone() para criar uma nova instância com os mesmos valores.
Nota: Se o laboratório não especificar um nome de arquivo, você pode usar qualquer nome de arquivo que desejar. Por exemplo, você pode usar
main.rs, compilar e executá-lo comrustc main.rs && ./main.
Clone (Clonar)
Ao lidar com recursos, o comportamento padrão é transferi-los durante atribuições ou chamadas de função. No entanto, às vezes precisamos também fazer uma cópia do recurso.
O trait Clone nos ajuda a fazer exatamente isso. Mais comumente, podemos usar o método .clone() definido pelo trait Clone.
// A unit struct without resources
#[derive(Debug, Clone, Copy)]
struct Unit;
// A tuple struct with resources that implements the `Clone` trait
#[derive(Clone, Debug)]
struct Pair(Box<i32>, Box<i32>);
fn main() {
// Instantiate `Unit`
let unit = Unit;
// Copy `Unit`, there are no resources to move
let copied_unit = unit;
// Both `Unit`s can be used independently
println!("original: {:?}", unit);
println!("copy: {:?}", copied_unit);
// Instantiate `Pair`
let pair = Pair(Box::new(1), Box::new(2));
println!("original: {:?}", pair);
// Move `pair` into `moved_pair`, moves resources
let moved_pair = pair;
println!("moved: {:?}", moved_pair);
// Error! `pair` has lost its resources
//println!("original: {:?}", pair);
// TODO ^ Try uncommenting this line
// Clone `moved_pair` into `cloned_pair` (resources are included)
let cloned_pair = moved_pair.clone();
// Drop the original pair using std::mem::drop
drop(moved_pair);
// Error! `moved_pair` has been dropped
//println!("copy: {:?}", moved_pair);
// TODO ^ Try uncommenting this line
// The result from .clone() can still be used!
println!("clone: {:?}", cloned_pair);
}
Resumo
Parabéns! Você concluiu o laboratório de Clone. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.