제네릭 이중 할당 해제 트레이트 구현

Beginner

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

소개

이 실험에서는 일반적인 DoubleDrop 트레이트가 정의됩니다. 이 트레이트는 타입이 자기 자신과 입력 매개변수를 할당 해제할 수 있도록 하는 double_drop 메서드를 포함합니다.

참고: 실험에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어 main.rs를 사용하고 rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.

트레이트

물론 trait도 제네릭일 수 있습니다. 여기서는 Drop trait을 재구현하여 자신과 입력값을 제거하는 제네릭 메서드로 정의합니다.

// 복사 불가능한 타입들.
struct Empty;
struct Null;

// `T` 에 대한 제네릭 트레이트.
trait DoubleDrop<T> {
    // 호출자 타입에 메서드를 정의하여 추가적인 단일 매개변수 `T` 를 받고 아무것도 하지 않습니다.
    fn double_drop(self, _: T);
}

// 모든 제네릭 매개변수 `T` 와 호출자 `U` 에 대해 `DoubleDrop<T>` 를 구현합니다.
impl<T, U> DoubleDrop<T> for U {
    // 이 메서드는 전달된 두 개의 인수 모두를 소유하여 두 개 모두를 할당 해제합니다.
    fn double_drop(self, _: T) {}
}

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

    // `empty` 와 `null` 을 할당 해제합니다.
    empty.double_drop(null);

    //empty;
    //null;
    // ^ TODO: 이 줄들을 주석 해제해 보세요.
}

요약

축하합니다! 트레이트 실험을 완료했습니다. LabEx 에서 더 많은 실험을 통해 기술을 향상시킬 수 있습니다.