¿Cómo incluir un módulo de otro archivo del mismo proyecto?


Siguiendo esta guía He creado un proyecto de carga

Src / main.rs

fn main() {
    hello::print_hello();
}

mod hello {
    pub fn print_hello() {
        println!("Hello, world!");
    }
}

Que corro usando

cargo build && cargo run

Y compila sin errores. Ahora estoy tratando de dividir el módulo principal en dos, pero no puedo averiguar cómo incluir un módulo de otro archivo.

Mi árbol de proyecto se ve así

├── src
    ├── hello.rs
    └── main.rs

Y el contenido de los archivos:

Src / main.rs

use hello;

fn main() {
    hello::print_hello();
}

Src/hello.rs{[12]]}

mod hello {
    pub fn print_hello() {
        println!("Hello, world!");
    }
}

Cuando lo compilo con cargo build get

modules/src/main.rs:1:5: 1:10 error: unresolved import (maybe you meant `hello::*`?)
modules/src/main.rs:1 use hello;
                                                  ^~~~~
error: aborting due to previous error
Could not compile `modules`.

Traté de seguir las sugerencias del compilador y modificado main.rs a

#![feature(globs)]

extern crate hello;

use hello::*;

fn main() {
    hello::print_hello();
}

Pero esto todavía no ayuda mucho, ahora entiendo esto{[12]]}

modules/src/main.rs:3:1: 3:20 error: can't find crate for `hello`
modules/src/main.rs:3 extern crate hello;
                                              ^~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
Could not compile `modules`.

¿Hay un ejemplo trivial de cómo incluir un módulo del proyecto actual en el archivo principal del proyecto?

Además, estoy ejecutando Rust 0.13.0-nightly y cargo 0.0.1-pre-nightly.

 54
Author: ave, 2014-10-15

2 answers

No necesita el mod hello en su archivo hello.rs. El código de cualquier archivo excepto la raíz de la caja (main.rs para los ejecutables, lib.rs para las bibliotecas) es automáticamente un espacio de nombres en un módulo.

Para incluir el código de hello.rs en su main.rs, use mod hello;. Se expande al código que está en hello.rs (exactamente como lo había hecho antes). Su estructura de archivos continúa igual, y su código necesita ser ligeramente cambiado:

Main.rs:

mod hello;

fn main() {
    hello::print_hello();
}

Hello.rs:

pub fn print_hello() {
    println!("Hello, world!");
}
 108
Author: Renato Zannon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-15 18:57:12

Necesita el archivo mod.rs en su carpeta. Rust por Ejemplo lo explica mejor.

$ tree .
.
|-- my
|   |-- inaccessible.rs
|   |-- mod.rs
|   |-- nested.rs
`-- split.rs

main.rs

mod my;

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

mod.rs

pub mod nested; //if you need to include other modules

pub fn function() {
    println!("called `my::function()`");
}
 0
Author: amxa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-25 14:54:23