Rust:无法从2个文件中导入1个模块

Fil*_*zyk 4 module rust

这是我的文件结构:

src/
??? main.rs
??? args_parser.rs
??? trim.rs
Run Code Online (Sandbox Code Playgroud)

args_parser.rs我有枚举Args,我想用main.rstrim.rs,但是当试图运行trim.rsmod args_parser;一开始就吐出了此错误信息:

error[E0583]: file not found for module `args_parser`
 --> src/trim.rs:1:5
  |
1 | mod args_parser;
  |     ^^^^^^^^^^^
  |
  = help: name the file either trim/args_parser.rs or trim/args_parser/mod.rs inside the directory "src"
Run Code Online (Sandbox Code Playgroud)

似乎希望trimm.rs只导入该模块中的文件,但是在Rust中,例如(https://doc.rust-lang.org/rust-by-example/mod/split.html) “此声明将查找名为my.rs或的文件my/mod.rs

有什么办法可以从main.rs和从中导入该文件trim.rs

ape*_*lla 5

您似乎在混淆声明一个模块(mod <name>)和导入一个模块(use <name>)。该mod关键字用于在另一文件中声明一个新的模块,或者,或者与花括号立即关键字以下。然后,您可以使用导入模块use

当使用mod其他文件中声明了一个模块,它会在特定的位置。例如,当您使用下面的语句中main.rsmod.rslib.rs...

mod abc;
Run Code Online (Sandbox Code Playgroud)

...编译器将在./abc.rs和中搜索模块的内容abc/mod.rs。但是,如果我在不同的文件中有相同的语句,例如def.rs,它将代替def/abc.rsdef/abc/mod.rs。这就是为什么您的代码无法编译的原因。

要解决此问题,请在主文件中声明该模块,然后将其导入其他位置。代码如下所示:

// in main.rs
mod args_parser;
mod trim;
use args_parser::...; // use whatever you need in main

// in trim.rs
use crate::args_parser::...; // use whatever you need in trim - note the crate:: prefix
Run Code Online (Sandbox Code Playgroud)

  • 我以为“mod”是用于导入的。感谢您澄清事情并通过解释!祝你今天过得愉快! (2认同)