如何使用多个文件中一个文件的功能?

时间:2019-01-18 20:08:03

标签: rust

我正在尝试将一个文件中的功能与其他多个文件一起使用。

当我尝试向文件中添加'mod somefile'时,Rust编译器希望将它们嵌套在一个子文件夹中,这不是我想要构建项目的方式,因为这意味着每次都要复制文件。 / p>

// src/main.rs
mod aaa;
mod bbb;

fn main() {
    aaa::do_something();
    bbb::do_something_else();
}
// src/aaa.rs
mod zzz; // rust compiler wants the file to be nested in a subfolder as aaa/zzz.rs

pub fn do_something() {
    zzz::do_stuff();
}
// src/bbb.rs
mod zzz; // again, compiler wants the file nested in a subfolder as bbb/zzz.rs

pub fn do_something_else() {
    zzz::do_stuff();
}
// src/zzz.rs

pub fn do_stuff() {
    // does stuff here
}

我希望能够将src/zzz.rs留在根src文件夹中,并在项目中的其他任何文件中使用其功能,而不必在每个文件的子文件夹中复制它(例如:src/aaa/zzz.rssrc/bbb/zzz.rs)。

1 个答案:

答案 0 :(得分:4)

您只需在mod zzz;中一次main.rs

aaa.rsbbb.rs中,您需要use crate::zzz;,而不是mod zzz;

一个例子:

文件src/aaa.rs

use crate::zzz; // `crate::` is required since 2018 edition

pub fn do_something() {
    zzz::do_stuff();
}

文件src/bbb.rs

use crate::zzz;

pub fn do_something_else() {
    zzz::do_stuff();
}

文件src/main.rs

// src/main.rs
mod aaa;
mod bbb;
mod zzz;

fn main() {
    aaa::do_something();
    bbb::do_something_else();
}

文件src/zzz.rs

pub fn do_stuff() {
    println!("does stuff zzz");
}

仅当您有一个名为mod zzz;的目录并且其中包含文件aaaaaa时,才需要在mod.rs模块内使用zzz.rs。然后,您必须将mod zzz;放在mod.rs中,以使子模块aaa::zzz对您的程序其余部分可见。