En suivant ce guide j'ai créé un projet Cargo.
src/main.rs
fn main() {
hello::print_hello();
}
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
que je cours en utilisant
cargo build && cargo run
et il compile sans erreurs. Maintenant, j'essaie de scinder le module principal en deux mais je ne peux pas comprendre comment inclure un module à partir d'un autre fichier.
Mon arbre de projet ressemble à ceci
├── src
├── hello.rs
└── main.rs
et le contenu des fichiers:
src/main.rs
use hello;
fn main() {
hello::print_hello();
}
src/hello.rs
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
Quand je le compile avec cargo build
Je reçois
error[E0432]: unresolved import `hello`
--> src/main.rs:1:5
|
1 | use hello;
| ^^^^^ no `hello` external crate
J'ai essayé de suivre les suggestions du compilateur et modifié main.rs
à:
#![feature(globs)]
extern crate hello;
use hello::*;
fn main() {
hello::print_hello();
}
Mais cela n'aide toujours pas beaucoup, maintenant je comprends:
error[E0463]: can't find crate for `hello`
--> src/main.rs:3:1
|
3 | extern crate hello;
| ^^^^^^^^^^^^^^^^^^^ can't find crate
Existe-t-il un exemple trivial expliquant comment inclure un module du projet actuel dans le fichier principal du projet?
En outre, je cours Rust 1.37.0.
Vous n'avez pas besoin du mod hello
dans votre hello.rs
fichier. Code dans n'importe quel fichier sauf la racine de la caisse (main.rs
pour les exécutables, lib.rs
pour les bibliothèques) est automatiquement namespaced sur un module.
Pour inclure le code de hello.rs
Sur ton main.rs
, utilisation mod hello;
. Il est étendu au code qui se trouve dans hello.rs
(exactement comme avant). Votre structure de fichier continue de la même façon et votre code doit être légèrement modifié:
main.rs
:
mod hello;
fn main() {
hello::print_hello();
}
hello.rs
:
pub fn print_hello() {
println!("Hello, world!");
}
Vous avez besoin du mod.rs
fichier dans votre dossier. Rust by Example l'explique mieux.
$ 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()`");
}