Как включить модуль из другого файла из того же проекта?
после данное руководство Я создал грузовой проект
src / main. rs
fn main() {
hello::print_hello();
}
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
который я запускаю с помощью
cargo build && cargo run
и он компилируется без ошибок. Теперь я пытаюсь разделить основной модуль на два, но не могу понять, как включить модуль из другого файла.
мое дерево проектов выглядит так
├── src
├── hello.rs
└── main.rs
и содержание файлы:
src / main. rs
use hello;
fn main() {
hello::print_hello();
}
src / hello. rs
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
когда я компилирую его с cargo build
Я
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`.
Я попытался следовать предложениям компилятора и изменил main.rs к
#![feature(globs)]
extern crate hello;
use hello::*;
fn main() {
hello::print_hello();
}
но это все еще не очень помогает, теперь я получаю это
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`.
есть ли тривиальный пример того, как включить один модуль из текущего проекта в основной файл проекта?
кроме того, я бегу ржавчины 0.13.0-ночные и грузовые 0.0.1-предночные.
2 ответа:
вам не нужно
mod hello
на . Код на любом файле, кроме корня ящика (main.rs
для исполняемых файлов,lib.rs
для библиотек) автоматически помещается в пространство имен модуля.включить код
hello.rs
наmain.rs
используйтеmod hello;
. Он расширяется до кода, который находится наhello.rs
(точно так же, как и раньше). Ваша файловая структура остается прежней, и ваш код должен быть немного изменено:главная.РС:
mod hello; fn main() { hello::print_hello(); }
Здравствуйте.РС:
pub fn print_hello() { println!("Hello, world!"); }
вам нужно
mod.rs
файл в вашей папке. ржавчина на примере объясняет это лучше.$ 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()`"); }