汎用的な二重解放トレイトを実装する

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 でさらに多くの実験を行って練習してください。