Rust の型推論の高度な例

RustRustBeginner
今すぐ練習

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

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

はじめに

この実験では、Rust プログラミング言語を使用した高度な例で示されるように、変数の使用方法と値の代入に基づいて変数の型を推論する機能が型推論エンジンによって強調されます。

注: 実験でファイル名が指定されていない場合、好きなファイル名を使用できます。たとえば、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/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99297{{"Rust の型推論の高度な例"}} rust/mutable_variables -.-> lab-99297{{"Rust の型推論の高度な例"}} rust/integer_types -.-> lab-99297{{"Rust の型推論の高度な例"}} rust/function_syntax -.-> lab-99297{{"Rust の型推論の高度な例"}} rust/expressions_statements -.-> lab-99297{{"Rust の型推論の高度な例"}} rust/lifetime_specifiers -.-> lab-99297{{"Rust の型推論の高度な例"}} rust/method_syntax -.-> lab-99297{{"Rust の型推論の高度な例"}} rust/operator_overloading -.-> lab-99297{{"Rust の型推論の高度な例"}} end

推論

型推論エンジンはとても賢いです。初期化中に値式の型を見るだけでなく、その後変数がどのように使用されるかも見ます。ここに型推論の高度な例を示します。

fn main() {
    // アノテーションのおかげで、コンパイラは `elem` が u8 型であることを知っています。
    let elem = 5u8;

    // 空のベクトル(拡張可能な配列)を作成します。
    let mut vec = Vec::new();
    // この時点でコンパイラは `vec` の正確な型を知りません。ただ、何かのベクトル (`Vec<_>`) であることだけを知っています。

    // `elem` をベクトルに挿入します。
    vec.push(elem);
    // ああ! 今やコンパイラは `vec` が `u8` のベクトル (`Vec<u8>`) であることを知っています
    // TODO ^ `vec.push(elem)` 行をコメントアウトしてみてください

    println!("{:?}", vec);
}

変数の型アノテーションは不要でした。コンパイラもプログラマも満足しています!

まとめ

おめでとうございます! あなたは推論実験を完了しました。あなたの技術を向上させるために、LabExでさらに多くの実験を練習できます。