Gestión de lifetimes en structs de Rust

RustRustBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, tenemos un código Rust que demuestra el uso de los lifetimes en structs. El código incluye un struct llamado Borrowed que contiene una referencia a un i32, y la referencia debe sobrevivir al struct mismo. También hay un struct llamado NamedBorrowed con dos referencias a i32, ambas deben sobrevivir al struct. Además, hay un enum llamado Either que puede ser un i32 o una referencia a uno, y la referencia debe sobrevivir al enum. Finalmente, el código crea instancias de estos structs y enum, e imprime su contenido para mostrar el uso de los lifetimes en Rust.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilar y ejecutarlo con 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(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) 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") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/variable_declarations -.-> lab-99207{{"Gestión de lifetimes en structs de Rust"}} rust/integer_types -.-> lab-99207{{"Gestión de lifetimes en structs de Rust"}} rust/function_syntax -.-> lab-99207{{"Gestión de lifetimes en structs de Rust"}} rust/expressions_statements -.-> lab-99207{{"Gestión de lifetimes en structs de Rust"}} rust/method_syntax -.-> lab-99207{{"Gestión de lifetimes en structs de Rust"}} end

Structs

La anotación de lifetimes en estructuras también es similar a las funciones:

// Un tipo `Borrowed` que contiene una referencia a un
// `i32`. La referencia a `i32` debe sobrevivir a `Borrowed`.
#[derive(Debug)]
struct Borrowed<'a>(&'a i32);

// Del mismo modo, ambas referencias aquí deben sobrevivir a esta estructura.
#[derive(Debug)]
struct NamedBorrowed<'a> {
    x: &'a i32,
    y: &'a i32,
}

// Un enum que puede ser un `i32` o una referencia a uno.
#[derive(Debug)]
enum Either<'a> {
    Num(i32),
    Ref(&'a i32),
}

fn main() {
    let x = 18;
    let y = 15;

    let single = Borrowed(&x);
    let double = NamedBorrowed { x: &x, y: &y };
    let reference = Either::Ref(&x);
    let number    = Either::Num(y);

    println!("x is borrowed in {:?}", single);
    println!("x and y are borrowed in {:?}", double);
    println!("x is borrowed in {:?}", reference);
    println!("y is *not* borrowed in {:?}", number);
}

Resumen

¡Felicidades! Has completado el laboratorio de Structs. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.