Исследование принудительного приведения типов сроков жизни в Rust

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

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

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

Введение

В этом лабораторном задании исследуется концепция принудительного приведения типов в Rust, при котором более длительный срок жизни может быть принудительно приведен к более короткому, чтобы обеспечить функциональность в определенном диапазоне. Это может происходить за счет инференции принудительного приведения типов компилятором Rust или путем объявления разницы сроков жизни с использованием синтаксиса, такого как <‘a: ‘b, ‘b>.

Примечание: Если лабораторное задание не задает имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать 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/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 инференцирует срок жизни, который尽可能 короткий.
// Затем два ссылки принудительно приводятся к этому сроку жизни.
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, чтобы улучшить свои навыки.