无法从另一个板条箱导入模块 - 未解决的导入

Can't import a module from another crate - unresolved import

我正在尝试编写一个名为 bar 的 crate,结构如下所示

src/
├── bar.rs
└── lib.rs

我的src/lib.rs看起来像这样

#![crate_type = "lib"]
#![crate_name = "bar"]
#![feature(ip_addr)]
#[allow(dead_code)]
pub mod bar;

我的bar.rs

pub struct baz {
  // stuff
}

impl baz {
  // stuff
}

现在,当我尝试在另一个箱子中使用这个箱子时,例如:

extern crate bar;

use bar::baz;

fn main() {
    let cidr = baz::new("Hi");
    println!("{}", cidr.say());
}

失败

error: unresolved import `bar::baz`. There is no `baz` in `bar`

我需要在其他地方声明模块吗?

您缺少的重要部分是板条箱定义了它们自己的模块。也就是说,您的 crate bar 隐式定义了一个名为 bar 的模块,但您还在 中创建了一个名为 bar 的模块。您的结构位于这个嵌套模块中。

如果你把你的 main 改成 use bar::bar::baz; 你可以超越这个。不过,您必须决定这是否是您想要的结构。大多数惯用的 Rust 项目不会有额外的 mod 并且会把它弄平:

src/lib.rs

pub struct Baz {
    // stuff
}

impl Baz {
    // stuff
}

不幸的是,你的示例代码无法编译,因为你有无效的结构定义,并且你调用了不存在的方法 (new),所以我无法告诉你它还需要什么编译.

此外,结构应该是 PascalCase