Exploration de la coercition de durée de vie en Rust

RustRustBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, le concept de coercition en Rust est exploré, où une durée de vie plus longue peut être coercée en une durée de vie plus courte pour permettre une fonctionnalité dans une portée spécifique. Cela peut se produire par coercition inférée par le compilateur Rust ou en déclarant une différence de durée de vie en utilisant une syntaxe telle que <'a: 'b, 'b>.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec 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{{"Exploration de la coercition de durée de vie en Rust"}} rust/integer_types -.-> lab-99210{{"Exploration de la coercition de durée de vie en Rust"}} rust/type_casting -.-> lab-99210{{"Exploration de la coercition de durée de vie en Rust"}} rust/function_syntax -.-> lab-99210{{"Exploration de la coercition de durée de vie en Rust"}} rust/expressions_statements -.-> lab-99210{{"Exploration de la coercition de durée de vie en Rust"}} end

Coercition

Une durée de vie plus longue peut être coercée en une durée de vie plus courte de manière à ce qu'elle fonctionne dans une portée dans laquelle elle ne fonctionnerait normalement pas. Cela se présente sous la forme d'une coercition inférée par le compilateur Rust, mais également sous la forme de la déclaration d'une différence de durée de vie :

// Ici, Rust infère une durée de vie aussi courte que possible.
// Les deux références sont ensuite coercées vers cette durée de vie.
fn multiply<'a>(first: &'a i32, second: &'a i32) -> i32 {
    first * second
}

// `< 'a: 'b, 'b>` s'interprète comme la durée de vie `'a` est au moins aussi longue que `'b`.
// Ici, nous prenons un `&'a i32` et retournons un `&'b i32` suite à la coercition.
fn choose_first<'a: 'b, 'b>(first: &'a i32, _: &'b i32) -> &'b i32 {
    first
}

fn main() {
    let first = 2; // Durée de vie plus longue

    {
        let second = 3; // Durée de vie plus courte

        println!("Le produit est {}", multiply(&first, &second));
        println!("{} est le premier", choose_first(&first, &second));
    };
}

Résumé

Félicitations ! Vous avez terminé le laboratoire sur la coercition. Vous pouvez pratiquer d'autres laboratoires dans LabEx pour améliorer vos compétences.