如何定义多级板条箱?

时间:2015-09-30 21:33:56

标签: rust rust-crates

我正在尝试按照documentation中的说明定义 crate 以及我的Rust应用程序。我们采用以下目录结构:

src/
├─ lib.rs
├─ main.rs
└─ myapp/
  ├─ a/
  │ ├─ a1.rs
  │ └─ mod.rs
  └─ mod.rs

现在我在生锈文件中定义了以下内容:

lib.rs

pub mod myapp;

main.rs

extern crate myapp;
use myapp::a;

fn main() {
    unimplemented!();
}

的myapp / mod.rs

pub mod a;

的myapp /一个/ mod.rs

pub use self::a1::*;
mod a1;

的myapp /一个/ a1.rs

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`.

我在哪里错了?我认为我的目录结构与文档中显示的目录结构相同。

1 个答案:

答案 0 :(得分:4)

您添加了额外级别的嵌套。如果您将其更改为

,则主要作品
extern crate myapp;
use myapp::myapp::a;

fn main() {
    unimplemented!();
}

Crates在路径中形成自己的级别,因此第一个myapp引用crate,第二个myapp引用您创建的模块。

另一方面,很少看到具有这种嵌套和分叉水平的板条箱。 Rust crates往往每个文件都有更大的代码块,当然也不是其他语言中常见的one-struct-per-file。当然,这完全取决于我的经验,并不是一个严格的规则。