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

标签 rust

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

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

// 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)。

最佳答案

您只需在 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。然后,您必须将 mod zzz; 放入 mod.rs 中,以使子模块 aaa::zzz 对程序的其余部分可见。

关于rust - 如何在多个文件中使用一个文件中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54260772/

相关文章:

rust - Rust traits 可以部分实现吗?

Rust 具有相同基本结构的不同返回类型

macros - 宏可以将数组/向量扩展为多个索引参数吗?

rust - 有没有更快/更短的方法来初始化 Rust 结构中的变量?

c - C 语言中 Scala 的 Option 或 Rust 的 Result 错误处理

rust - 如何在 Rust 中使用返回类型为 `Fn` 的 `impl trait` 特征?

reference - 为什么我可以返回对局部文字的引用而不是变量?

pointers - 为什么断言 Deref::deref 的结果会因类型不匹配而失败?

rust - 在另一种支持泛型的类型中使用 impl Trait

rust - 静态需求从何而来?