这是我的文件结构:
src/
├── main.rs
├── args_parser.rs
└── trim.rs
在args_parser.rs
我有我想在Args
和main.rs
使用的枚举trim.rs
,但是当试图在开头用trim.rs
运行mod 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"
看起来它希望trim.rs只导入来自这个模块的文件,但是在Rust中通过示例(https://doc.rust-lang.org/rust-by-example/mod/split.html)它说“这个声明将寻找一个名为my.rs
或my/mod.rs
的文件”。
有什么办法可以从main.rs
和trim.rs
导入这个文件吗?
你似乎在混淆声明一个模块(mod <name>
)和导入一个模块(use <name>
)。 mod
关键字用于在另一个文件中声明一个新模块,或者在关键字后面紧跟大括号。然后,您可以使用use
导入模块。
使用mod
在另一个文件中声明模块时,它会查找特定位置。例如,当您在main.rs
,mod.rs
或lib.rs
中使用以下语句时...
mod abc;
...编译器将在./abc.rs
和abc/mod.rs
中搜索模块的内容。但是,如果我在不同的文件中使用相同的语句,例如def.rs
,它将检入def/abc.rs
和def/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