Rust のライフタイム強制変換の探究

RustRustBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Rustにおける強制変換の概念を検討します。ここでは、特定のスコープ内での機能を可能にするために、長いライフタイムを短いライフタイムに強制変換できます。これは、Rustコンパイラによる推論による強制変換、または <'a: 'b, 'b> などの構文を使用してライフタイムの違いを宣言することによって発生する場合があります。

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") subgraph Lab Skills rust/variable_declarations -.-> lab-99210{{"Rust のライフタイム強制変換の探究"}} rust/integer_types -.-> lab-99210{{"Rust のライフタイム強制変換の探究"}} rust/type_casting -.-> lab-99210{{"Rust のライフタイム強制変換の探究"}} rust/function_syntax -.-> lab-99210{{"Rust のライフタイム強制変換の探究"}} rust/expressions_statements -.-> lab-99210{{"Rust のライフタイム強制変換の探究"}} end

強制変換

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

まとめ

おめでとうございます!あなたは強制変換の実験を完了しました。あなたの技術を向上させるために、LabExでさらに多くの実験を行って練習してください。