Rust の構造体における寿命管理

Beginner

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

はじめに

この実験では、Rust のコードを使って構造体における寿命の使用方法を示します。コードには、i32 型への参照を保持する Borrowed という構造体が含まれており、その参照は構造体自体よりも長い寿命を持たなければなりません。また、i32 型への 2 つの参照を持つ NamedBorrowed という構造体もあり、その両方の参照も構造体よりも長い寿命を持たなければなりません。さらに、i32 型またはそれへの参照のいずれかを持つ Either という列挙型があり、その参照は列挙型よりも長い寿命を持たなければなりません。最後に、このコードはこれらの構造体と列挙型のインスタンスを作成し、それらの内容を表示して Rust における寿命の使用方法を示します。

注: 実験でファイル名が指定されていない場合、好きなファイル名を使うことができます。たとえば、main.rs を使って、rustc main.rs &&./main でコンパイルして実行することができます。

構造体

構造体における寿命の注釈も関数と同様です。

// `i32` 型への参照を保持する型 `Borrowed`。
// `i32` 型への参照は、`Borrowed` よりも長い寿命を持たなければなりません。
#[derive(Debug)]
struct Borrowed<'a>(&'a i32);

// 同様に、ここにある両方の参照は、この構造体よりも長い寿命を持たなければなりません。
#[derive(Debug)]
struct NamedBorrowed<'a> {
    x: &'a i32,
    y: &'a i32,
}

// `i32` 型またはそれへの参照のいずれかである列挙型。
#[derive(Debug)]
enum Either<'a> {
    Num(i32),
    Ref(&'a i32),
}

fn main() {
    let x = 18;
    let y = 15;

    let single = Borrowed(&x);
    let double = NamedBorrowed { x: &x, y: &y };
    let reference = Either::Ref(&x);
    let number    = Either::Num(y);

    println!("x is borrowed in {:?}", single);
    println!("x and y are borrowed in {:?}", double);
    println!("x is borrowed in {:?}", reference);
    println!("y is *not* borrowed in {:?}", number);
}

まとめ

おめでとうございます!あなたは構造体の実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を練習することができます。