如何在多个文件中使用一个文件中的函数?

A. *_*ood 2 rust

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

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

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

fn main() {
    aaa::do_something();
    bbb::do_something_else();
}
Run Code Online (Sandbox Code Playgroud)
// 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();
}
Run Code Online (Sandbox Code Playgroud)
// 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();
}
Run Code Online (Sandbox Code Playgroud)
// src/zzz.rs

pub fn do_stuff() {
    // does stuff here
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*kin 5

您只需要mod zzz;进入一次main.rs

而你需要的是一个aaa.rs,而不是一个。bbb.rsuse crate::zzz;mod zzz;

一个例子:

文件src/aaa.rs

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

pub fn do_something() {
    zzz::do_stuff();
}
Run Code Online (Sandbox Code Playgroud)

文件src/bbb.rs

use crate::zzz;

pub fn do_something_else() {
    zzz::do_stuff();
}
Run Code Online (Sandbox Code Playgroud)

文件src/main.rs

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

fn main() {
    aaa::do_something();
    bbb::do_something_else();
}
Run Code Online (Sandbox Code Playgroud)

文件src/zzz.rs

pub fn do_stuff() {
    println!("does stuff zzz");
}
Run Code Online (Sandbox Code Playgroud)

仅当您有一个名为mod zzz;aaa目录aaa并且其中包含文件mod.rszzz.rs. 然后您必须将其放入mod zzz;mod.rs使子模块aaa::zzz对程序的其余部分可见。