型強制
より長いライフタイムは、通常は機能しないスコープ内で機能するように、 より短いライフタイムへ型強制できます。 これは、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)); }; }