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 comrustc 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.