Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

型強制

より長いライフタイムは、通常は機能しないスコープ内で機能するように、 より短いライフタイムへ型強制できます。 これは、Rust コンパイラによる推論された型強制という形で現れ、 また、ライフタイムの差異を宣言する形でも現れます:

// ここでは、Rust は可能な限り短いライフタイムを推論します。
// その後、2 つの参照はそのライフタイムへ型強制されます。
fn multiply<'a>(first: &'a i32, second: &'a i32) -> i32 {
    first * second
}

// `<'a: 'b, 'b>` は、ライフタイム `'a` が少なくとも `'b` と同じ長さであることを意味します。
// ここでは、`&'a i32` を受け取り、型強制の結果として `&'b i32` を返します。
fn choose_first<'a: 'b, 'b>(first: &'a i32, _: &'b i32) -> &'b i32 {
    first
}

fn main() {
    let first = 2; // より長いライフタイム

    {
        let second = 3; // より短いライフタイム

        println!("積は {} です", multiply(&first, &second));
        println!("{} が最初です", choose_first(&first, &second));
    };
}