Menu
Coddy logo textTech

まとめ - スマートポインタのモック

CoddyのRustジャーニー「Object Oriented Programming」セクションの一部 — レッスン 58/61。

challenge icon

チャレンジ

簡単

Rustの実際のスマートポインタが内部でどのように動作するかをデモンストレーションする、SmartBoxという名前のスマートポインタのモックを作成しましょう!このラッパーはジェネリックであり、内部の値へのアクセスを提供し、クリーンアップされる際に自動的に通知を行うようにします。

コードは2つのファイルに分けて構成します:

  • smart_box.rs: 型Tの単一のフィールドvalueを持つ、パブリックなジェネリック構造体SmartBox<T>を定義します。SmartBoxを作成し、作成メッセージを表示するnew関連関数を実装してください。内部の値への参照を返すgetメソッドを追加します。最後に、SmartBoxがスコープを抜けるときにクリーンアップメッセージを表示するようにDropトレイトを実装してください。
  • main.rs: smart_boxモジュールを取り込み、2つの異なる型でSmartBoxをデモンストレーションします。数値(提供された入力から)を保持するSmartBox<i32>と、テキスト(提供された入力から)を保持するSmartBox<String>を作成します。getメソッドを使用して値を表示してください。Dropメッセージは、mainの最後でボックスがスコープを抜けるときに自動的に表示されます。

SmartBoxが作成されるとき、次のように表示する必要があります:

SmartBox created

値にアクセスするときは、次の形式で表示してください:

Value: {value}

SmartBoxがドロップされるとき、次のように表示する必要があります:

SmartBox dropped

例えば、入力が42Helloの場合:

SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox dropped

mainが終了するときに、両方のボックスが最初に作成され、次にそれらの値にアクセスされ、最後に両方が逆の順序(最後に作成されたものが最初にドロップされる)でドロップされることに注目してください。

2つの入力を受け取ります:整数値(i32としてパース)と文字列値です。

自分で試してみよう

mod smart_box;

use smart_box::SmartBox;

fn main() {
    // 入力を読み込む
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let number: i32 = input1.trim().parse().expect("Failed to parse number");
    
    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let text = input2.trim().to_string();
    
    // TODO: 数値を保持する SmartBox<i32> を作成する
    
    // TODO: テキストを保持する SmartBox<String> を作成する
    
    // TODO: get メソッドを使用して値を表示する
    // フォーマット: "Value: {value}"
    
    // main が終了すると、Drop メッセージが自動的に表示されます
}

Object Oriented Programmingのすべてのレッスン