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

kpbwa7wx  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(63)

我试图使用的功能从一个文件与多个其他文件。
当我尝试将“mod somefile”添加到文件中时,Rust编译器希望它们嵌套在子文件夹中,这不是我想要的项目结构,因为这意味着每次都要复制文件。

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

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

x

// 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文件夹中的src/zzz.rs和使用它的功能之间的任何其他文件在项目中,而不是必须复制它的每个文件(例如:src/aaa/zzz.rssrc/bbb/zzz.rs)在目录中。

qoefvg9y

qoefvg9y1#

main.rs中只需要mod zzz;一次。
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");
}


只有当你有一个名为aaa的目录,里面有一个文件mod.rszzz.rs时,你才需要在aaa模块里面有一个mod zzz;。然后你必须把mod zzz;放在mod.rs中,使子模块aaa::zzz对程序的其余部分可见。

相关问题