Implementar Trait Genérico de Dupla Desalocação

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, um traço genérico DoubleDrop é definido, que inclui um método double_drop que permite a um tipo desalocar a si próprio e um parâmetro de entrada.

Nota: Se o laboratório não especificar um nome de ficheiro, pode usar qualquer nome de ficheiro que desejar. Por exemplo, pode usar main.rs, compilá-lo e executá-lo com rustc main.rs && ./main.

Traits

É claro que os traits também podem ser genéricos. Aqui, definimos um que reimplementa o trait Drop como um método genérico para dropar a si próprio e uma entrada.

// Tipos não copiáveis.
struct Empty;
struct Null;

// Um trait genérico sobre `T`.
trait DoubleDrop<T> {
    // Defina um método no tipo chamador que recebe um
    // parâmetro único adicional `T` e não faz nada com ele.
    fn double_drop(self, _: T);
}

// Implemente `DoubleDrop<T>` para qualquer parâmetro genérico `T` e
// chamador `U`.
impl<T, U> DoubleDrop<T> for U {
    // Este método assume a propriedade de ambos os argumentos passados,
    // desalocando ambos.
    fn double_drop(self, _: T) {}
}

fn main() {
    let empty = Empty;
    let null  = Null;

    // Desalocar `empty` e `null`.
    empty.double_drop(null);

    //empty;
    //null;
    // ^ TODO: Tente descomentar estas linhas.
}

Resumo

Parabéns! Concluiu o laboratório de Traits. Pode praticar mais laboratórios no LabEx para melhorar as suas competências.