How to use functions from one file among multiple

2020-02-15 05:34发布

I'm trying to use the functions from one file with multiple other files.

When I try adding 'mod somefile' to the files, the Rust compiler wants them to be nested in a subfolder, which isn't how I want to structure the project, as it would mean duplicating the file each time.

// 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
}

I would like to be able to leave src/zzz.rs in the root src folder and use its functions among any of the other files in the project, instead of having to duplicate it in subfolders for each file (ex: src/aaa/zzz.rs, src/bbb/zzz.rs).

标签: rust
1条回答
小情绪 Triste *
2楼-- · 2020-02-15 06:26

You need mod zzz; only once in the main.rs.

In aaa.rs and bbb.rs you need a use crate::zzz;, not a mod zzz;.

An example:

File src/aaa.rs:

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

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

File src/bbb.rs:

use crate::zzz;

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

File src/main.rs:

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

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

File src/zzz.rs:

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

You would need a mod zzz; inside of aaa module only if you had a directory called aaa and inside of it a files mod.rs and zzz.rs. Then you would have to put mod zzz; in mod.rs to make the submodule aaa::zzz visible to the rest of your program.

查看更多
登录 后发表回答