強制 - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## 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!("The product is {}", multiply(&first, &second));
            println!("{} is the first", choose_first(&first, &second));
        };
    }