当我运行use crate::feed;时,src/cmdline.rs 我希望 import src/feed.rs,但事实并非如此。相反我得到,
error[E0432]: unresolved import `crate::feed`
--> src/cmdline.rs:2:5
|
2 | use crate::feed;
| ^^^^^^^^^^^ no `feed` in the root
Run Code Online (Sandbox Code Playgroud)
尽管事实src/feed.rs存在。但是,如果我恐慌并将其更改为mod feed;那么我会得到
error[E0583]: file not found for module `feed`
--> src/cmdline.rs:2:1
|
2 | mod feed;
| ^^^^^^^^^
|
= help: to create the module `feed`, create file "src/cmdline/feed.rs"
Run Code Online (Sandbox Code Playgroud)
使用mod super::
error: expected identifier, found keyword `super`
--> src/cmdline.rs:2:5
|
2 | mod super::feed;
| ^^^^^ expected identifier, found keyword
Run Code Online (Sandbox Code Playgroud)
或者与use super::
error[E0432]: unresolved import `super::feed`
--> src/cmdline.rs:2:5
|
2 | use super::feed;
| ^^^^^^^^^^^ no `feed` in the root
Run Code Online (Sandbox Code Playgroud)
相关文件的文件结构如下所示,
src/feed.rs
src/cmdline.rs
src/main.rs
Run Code Online (Sandbox Code Playgroud)
通过执行以下操作,我能够使我的导入按照您描述的方式工作。
首先,main.rs我导入模块cmdline以及我希望能够通过crate::.
// file src/main.rs
mod cmdline;
mod feed; // <== import module to be able to use via `crate::feed`
fn main() {
cmdline::do_something();
}
Run Code Online (Sandbox Code Playgroud)
然后在cmdline.rs我使用create::feed.
// file src/cmdline.rs
use crate::feed; // <== import sibling module
pub fn do_something() {
feed::do_something_else();
}
Run Code Online (Sandbox Code Playgroud)
我的feed.rs看起来像这样。
// file src/feed.rs
pub fn d_something_else() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
据我从实验中了解到,您需要首先使用modinmain.rs来定义您的板条箱中包含哪些模块。
我想到了。Rust 模块系统不允许导入同级文件,
src/a.rssrc/b.rs句号:a.rs无法导入b.rs。它要做的就是尝试从以下来源获取它
src/a/b.rs如果您正在考虑这个答案,那么这些对您来说可能都没有意义,并且您已经在这上面浪费了时间。这是我困惑的一个根源:
src/main.rs其实很特别。src/main.rs在a内部mod将导入同级文件(也可以使用现已弃用的mod.rs; 或 with lib.rs)。但关键是您自己的 Rust 文件无法使用同级文件中的 Rust 代码。
| 归档时间: |
|
| 查看次数: |
5825 次 |
| 最近记录: |