Rust のバローチェッカーによるライフタイム省略

RustRustBeginner
今すぐ練習

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

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

はじめに

この実験では、Rustにおける省略(elision)の概念を調べます。ここでは、バローチェッカーが一般的なライフタイムパターンの省略を許可することで、読みやすさを向上させ、入力を削減します。

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") subgraph Lab Skills rust/variable_declarations -.-> lab-99212{{"Rust のバローチェッカーによるライフタイム省略"}} rust/integer_types -.-> lab-99212{{"Rust のバローチェッカーによるライフタイム省略"}} rust/function_syntax -.-> lab-99212{{"Rust のバローチェッカーによるライフタイム省略"}} rust/expressions_statements -.-> lab-99212{{"Rust のバローチェッカーによるライフタイム省略"}} end

省略

一部のライフタイムパターンは非常に一般的であるため、バローチェッカーは入力を省略して読みやすさを向上させるためにそれらを省略することを許可します。これは省略(elision)と呼ばれます。省略は、これらのパターンが一般的であるためにのみRustに存在します。

次のコードは、省略のいくつかの例を示しています。省略のより包括的な説明については、本のライフタイム省略を参照してください。

// `elided_input` と `annotated_input` は本質的に同じ署名を持っています
// なぜなら、`elided_input` のライフタイムはコンパイラによって推論されるからです:
fn elided_input(x: &i32) {
    println!("`elided_input`: {}", x);
}

fn annotated_input<'a>(x: &'a i32) {
    println!("`annotated_input`: {}", x);
}

// 同様に、`elided_pass` と `annotated_pass` は同じ署名を持っています
// なぜなら、ライフタイムが暗黙的に `elided_pass` に追加されるからです:
fn elided_pass(x: &i32) -> &i32 { x }

fn annotated_pass<'a>(x: &'a i32) -> &'a i32 { x }

fn main() {
    let x = 3;

    elided_input(&x);
    annotated_input(&x);

    println!("`elided_pass`: {}", elided_pass(&x));
    println!("`annotated_pass`: {}", annotated_pass(&x));
}

まとめ

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