Organización de archivos modular en 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, la jerarquía de archivos de los módulos en el ejemplo de código puede representarse de la siguiente manera: Existe un directorio llamado "my" que contiene dos archivos, "inaccessible.rs" y "nested.rs". Además, existe un archivo llamado "my.rs" y un archivo llamado "split.rs". El archivo "split.rs" incluye el módulo "my" que está definido en el archivo "my.rs", y el archivo "my.rs" incluye los módulos "inaccessible" y "nested" que están definidos en los archivos "inaccessible.rs" y "nested.rs" respectivamente.

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/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/ProjectManagementandOrganizationGroup(["Project Management and Organization"]) rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/ProjectManagementandOrganizationGroup -.-> rust/module_system("Module System") subgraph Lab Skills rust/function_syntax -.-> lab-99336{{"Organización de archivos modular en Rust"}} rust/expressions_statements -.-> lab-99336{{"Organización de archivos modular en Rust"}} rust/method_syntax -.-> lab-99336{{"Organización de archivos modular en Rust"}} rust/module_system -.-> lab-99336{{"Organización de archivos modular en Rust"}} end

Jerarquía de archivos

Los módulos se pueden mapear a una jerarquía de archivos/directorios. Analicemos el ejemplo de visibilidad en archivos:

$ tree.
.
├── my
│   ├── inaccessible.rs
│   └── nested.rs
├── my.rs
└── split.rs

En split.rs:

// Esta declaración buscará un archivo llamado `my.rs` y
// insertará su contenido dentro de un módulo llamado `my` en este ámbito
mod my;

fn function() {
    println!("llamado `function()`");
}

fn main() {
    my::function();

    function();

    my::indirect_access();

    my::nested::function();
}

En my.rs:

// Del mismo modo, `mod inaccessible` y `mod nested` localizarán los archivos `nested.rs`
// y `inaccessible.rs` e insertarán aquí bajo sus respectivos
// módulos
mod inaccessible;
pub mod nested;

pub fn function() {
    println!("llamado `my::function()`");
}

fn private_function() {
    println!("llamado `my::private_function()`");
}

pub fn indirect_access() {
    print!("llamado `my::indirect_access()`, que\n> ");

    private_function();
}

En my/nested.rs:

pub fn function() {
    println!("llamado `my::nested::function()`");
}

#[allow(dead_code)]
fn private_function() {
    println!("llamado `my::nested::private_function()`");
}

En my/inaccessible.rs:

#[allow(dead_code)]
pub fn public_function() {
    println!("llamado `my::inaccessible::public_function()`");
}

Veamos si las cosas siguen funcionando como antes:

$ rustc split.rs &&./split
llamado `my::function()`
llamado `function()`
llamado `my::indirect_access()`, que
> llamado `my::private_function()`
llamado `my::nested::function()`

Resumen

¡Felicitaciones! Has completado el laboratorio de Jerarquía de archivos. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.