这是我的文件结构:
src/
├── main.rs
├── args_parser.rs
└── trim.rs
在args_parser.rs
中,我有一个枚举Args
我想在main.rs
和trim.rs
中使用,但是当尝试使用{{1 }}在开始时会显示以下错误消息:
trim.rs
似乎希望trimm.rs仅导入来自此模块的文件,但是在Rust示例(website form)中,它说“此声明将查找名为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"
”。
有什么方法可以从my.rs
和my/mod.rs
导入此文件?
答案 0 :(得分:4)
您似乎在混淆声明一个模块(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