rust: разбить один файл на отдельные модули

Рейтинг: 0Ответов: 1Опубликовано: 26.03.2023

Когда все три файла: tcp.rs, lib_04.rs и lib_05.rs в одной папке, где первый содержит fn main(), а остальные два - как модули, т.е. разбил большой файл на три, то так работает:

> rustc tcp.rs --out-dir pdb_exe; .\pdb_exe\tcp.exe
[ - - - - - - - - -
x = 5, y = 5
s1 = sss, s2 = sss
t = 88
- - - - - - - - - ]

Если хочу эти два файла: lib_04.rs и lib_05.rs поместить в свою папку, например, lib, то не могу правильно прописать к ним путь, чтобы работало. Получилось, только, если внутри такой папки поместить один файл с именем mod.rs и обозначить один mod lib; в tcp.rs.

Файлы:

// tcp.rs
mod lib_04;
mod lib_05;

fn main() {
    println!("[ - - - - - - - - -");
    let x = 5; 
    let y = x;
    println!("x = {}, y = {}", x, y);

    lib_04::test();
    lib_05::t05();
    println!("- - - - - - - - - ]");
}

// lib_04.rs
pub fn test() {
    let s1 = String::from("sss");
    let s2 = s1.clone();
    println!("s1 = {}, s2 = {}", s1, s2);
}

// lib_05.rs
pub fn t05() {
    let t = 88;
    println!("t = {}", t);
}

Как правильно разбить большой файл на блоки файлов и поместить их в отдельную папку?

Ответы

▲ 0

Делаю так:

В папке lib куда поместил файлы lib_04.rs и lib_05.rs создал связующий файл mod.rs, в котором прописал:

pub mod lib_04;
pub mod lib_05;

Когда в ключевом файле tcp.rs указал так:

mod lib;

то работают вызовы по файлам:

lib::lib_04::test();            
lib::lib_05::t05();

// файл tcp.rs
mod lib; 
fn main() {
    println!("[ - - - - - - - - -");

    let x = 5; 
    let y = x;
    println!("x = {}, y = {}", x, y);

    lib::lib_04::test();            
    lib::lib_05::t05();
    println!("- - - - - - - - - ]");
}