Préstamo mutable en el libro 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, exploramos la mutabilidad en Rust al examinar el concepto de prestar datos a través de referencias mutables e inmutables, utilizando el ejemplo de una estructura book con funciones que demuestran el comportamiento del préstamo mutable e inmutable.

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/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/string_type("String Type") 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-99199{{"Préstamo mutable en el libro de Rust"}} rust/mutable_variables -.-> lab-99199{{"Préstamo mutable en el libro de Rust"}} rust/integer_types -.-> lab-99199{{"Préstamo mutable en el libro de Rust"}} rust/string_type -.-> lab-99199{{"Préstamo mutable en el libro de Rust"}} rust/type_casting -.-> lab-99199{{"Préstamo mutable en el libro de Rust"}} rust/function_syntax -.-> lab-99199{{"Préstamo mutable en el libro de Rust"}} rust/expressions_statements -.-> lab-99199{{"Préstamo mutable en el libro de Rust"}} end

Mutabilidad

Los datos mutables pueden ser prestados mutablesmente usando &mut T. Esto se llama una referencia mutable y otorga acceso de lectura/escritura al prestatario. En contraste, &T presta los datos a través de una referencia inmutable, y el prestatario puede leer los datos pero no modificarlos:

#[allow(dead_code)]
#[derive(Clone, Copy)]
struct Book {
    // `&'static str` es una referencia a una cadena almacenada en memoria de solo lectura
    author: &'static str,
    title: &'static str,
    year: u32,
}

// Esta función toma una referencia a un libro
fn borrow_book(book: &Book) {
    println!("I immutably borrowed {} - {} edition", book.title, book.year);
}

// Esta función toma una referencia a un libro mutable y cambia `year` a 2014
fn new_edition(book: &mut Book) {
    book.year = 2014;
    println!("I mutably borrowed {} - {} edition", book.title, book.year);
}

fn main() {
    // Crea un libro inmutable llamado `immutabook`
    let immutabook = Book {
        // los literales de cadena tienen el tipo `&'static str`
        author: "Douglas Hofstadter",
        title: "Gödel, Escher, Bach",
        year: 1979,
    };

    // Crea una copia mutable de `immutabook` y llámala `mutabook`
    let mut mutabook = immutabook;

    // Presta inmutablemente un objeto inmutable
    borrow_book(&immutabook);

    // Presta inmutablemente un objeto mutable
    borrow_book(&mutabook);

    // Presta un objeto mutable como mutable
    new_edition(&mut mutabook);

    // Error! No se puede prestar un objeto inmutable como mutable
    new_edition(&mut immutabook);
    // FIXME ^ Comenta esta línea
}

Resumen

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