Расширенный пример вывода типов в Rust

RustRustBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном задании подчеркивается возможность движка вывода типов определить тип переменной на основе ее использования и присвоения значения, что демонстрируется в продвинутом примере на языке программирования 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, чтобы улучшить свои навыки.