12.3 Traits
당연히 trait
도 제네릭이 될 수 있다. 여기서는 Drop
trait
을 제네릭 메소드로 재구현하여 자신과 입력되는 것을 drop
하도록 정의한다.
Of course trait
s can also be generic. Here we define one which reimplements
the Drop
trait
as a generic method to drop
itself and an input.
// 복사 불가능한 타입들. struct Empty; struct Null; // `T`에 제네릭인 trait. trait DoubleDrop<T> { // 추가로 하나의 매개변수 `T`를 취하고 이걸로 아무것도 안하는 // 메소드를 호출자 타입에 정의한다. fn double_drop(self, _: T); } // `DoubleDrop`를 모든 제네릭 매개변수 `T`와 호출자 `U`에 대해 구현한다. 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: 해당 라인의 주석을 제거해보세요. }