我正在尝试按照documentation中的说明定义 crate 以及我的Rust应用程序。我们采用以下目录结构:
src/
├─ lib.rs
├─ main.rs
└─ myapp/
├─ a/
│ ├─ a1.rs
│ └─ mod.rs
└─ mod.rs
现在我在生锈文件中定义了以下内容:
pub mod myapp;
extern crate myapp;
use myapp::a;
fn main() {
unimplemented!();
}
pub mod a;
pub use self::a1::*;
mod a1;
pub fn myfunc()
{
unimplemented!();
}
如果我尝试编译上面的目录树,我收到错误:
$ cargo build
Compiling myapp v0.1.0
src/main.rs:2:5: 2:13 error: unresolved import `myapp::a`. There is no `a` in `myapp` [E0432]
src/main.rs:2 use myapp::a;
^~~~~~~~
src/main.rs:2:5: 2:13 help: run `rustc --explain E0432` to see a detailed explanation
error: aborting due to previous error
Could not compile `myapp`.
我在哪里错了?我认为我的目录结构与文档中显示的目录结构相同。
答案 0 :(得分:4)
您添加了额外级别的嵌套。如果您将其更改为
,则主要作品extern crate myapp;
use myapp::myapp::a;
fn main() {
unimplemented!();
}
Crates在路径中形成自己的级别,因此第一个myapp
引用crate,第二个myapp
引用您创建的模块。
另一方面,很少看到具有这种嵌套和分叉水平的板条箱。 Rust crates往往每个文件都有更大的代码块,当然也不是其他语言中常见的one-struct-per-file。当然,这完全取决于我的经验,并不是一个严格的规则。