这是我的文件结构:
src/
??? main.rs
??? args_parser.rs
??? trim.rs
Run Code Online (Sandbox Code Playgroud)
在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"
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?
您似乎在混淆声明一个模块(mod <name>)和导入一个模块(use <name>)。该mod关键字用于在另一文件中声明一个新的模块,或者,或者与花括号立即关键字以下。然后,您可以使用导入模块use。
当使用mod其他文件中声明了一个模块,它会在特定的位置。例如,当您使用下面的语句中main.rs,mod.rs或lib.rs...
mod abc;
Run Code Online (Sandbox Code Playgroud)
...编译器将在./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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |