Я хотів би додати тут, як ви включаєте файли Rust, коли вони глибоко вкладені. У мене така структура:
|-----main.rs
|-----home/
|---------bathroom/
|-----------------sink.rs
|-----------------toilet.rs
Як ви отримуєте доступ sink.rs
чи toilet.rs
з якого main.rs
?
Як уже згадували інші, Руст не знає файлів. Натомість він розглядає все як модулі та підмодулі. Щоб отримати доступ до файлів у каталозі ванної кімнати, потрібно експортувати їх або запустити вгору. Виконуєте це, вказавши ім'я файлу з каталогом, до якого ви хочете отримати доступ, і pub mod filename_inside_the_dir_without_rs_ext
всередині файлу.
Приклад.
// sink.rs
pub fn run() {
println!("Wash my hands for 20 secs!");
}
// toilet.rs
pub fn run() {
println!("Ahhh... This is sooo relaxing.")
}
Створіть файл, який називається bathroom.rs
всередині home
каталогу:
Експорт імен файлів:
// bathroom.rs
pub mod sink;
pub mod toilet;
Створіть файл, викликаний home.rs
поруч ізmain.rs
pub mod
файл ванної кімнати
// home.rs
pub mod bathroom;
У межах main.rs
// main.rs
// Note: If you mod something, you just specify the
// topmost module, in this case, home.
mod home;
fn main() {
home::bathroom::sink::run();
}
use
також можна використовувати:
// main.rs
// Note: If you mod something, you just specify the
// topmost module, in this case, home.
use home::bathroom::{sink, toilet};
fn main() {
sink::run();
sink::toilet();
}
Включаючи інші модулі (файли) братів і сестер в межах підмодулів
У випадку, який ви хочете використовувати sink.rs
з toilet.rs
, ви можете викликати модуль, вказавши self
або super
ключові слова.
// inside toilet.rs
use self::sink;
pub fn run() {
sink::run();
println!("Ahhh... This is sooo relaxing.")
}
Кінцева структура каталогів
Ви закінчите щось подібне:
|-----main.rs
|-----home.rs
|-----home/
|---------bathroom.rs
|---------bathroom/
|-----------------sink.rs
|-----------------toilet.rs
Структура вище працює лише з Rust 2018. Наступна структура каталогів також дійсна для 2018 року, але це, як раніше працював 2015 рік.
|-----main.rs
|-----home/
|---------mod.rs
|---------bathroom/
|-----------------mod.rs
|-----------------sink.rs
|-----------------toilet.rs
У якому home/mod.rs
те саме, що./home.rs
і home/bathroom/mod.rs
те саме, що home/bathroom.rs
. Іржа внесла цю зміну, оскільки компілятор заплутався б, якщо ви включили файл з тим же ім'ям, що і каталог. Версія 2018 року (перша, показана першою) виправляє цю структуру.
Дивіться це репо отримати докладніші відомості, для отримання додаткової інформації та це відео YouTube .
Останнє ... уникати дефісів! Використовуйте snake_case
замість цього.
Важлива примітка
Ви повинні барабанні всі файли в верхню частину, навіть якщо глибокі файли не потрібно ті верхній рівень.
Це означає, що для того, sink.rs
щоб виявити toilet.rs
, вам доведеться їх заборонити, використовуючи методи, перш за все, доmain.rs
!
Іншими словами, робити pub mod sink;
або use self::sink;
всередині неtoilet.rs
вийде, якщо ви не виставляєте їх до кінця !main.rs
Тому завжди пам’ятайте, що барель файлів доверху!