如何使用新的本地模块?

How do I use a new local module?

我无法导入和使用我编写的模块,不确定哪里出错了。

我的起始目录结构是:

/src/main.rs <- contains fn main()
/Cargo.toml

我想从我拥有的一个大主文件中重构一些代码,所以我 运行

cargo new mnemonic

留给我:

/src/main.rs <- contains fn main()
/Cargo.toml
/mnemonic/src/lib.rs
/mnemonic/Cargo.toml

在我创建的 /mnemonic/src/lib.rs 中输入:

pub mod mnemonic;

然后将我的代码放入 /mnemonic/src/mnemonic.rs(有 2 个 public 函数我想使用 main)。我从 mnemonic/ 运行 cargo build 回到我的主 src,我试过

extern crate mnemonic;

use mnemonic;

我也试过了use mnemonic::mnemonic;

在所有情况下,它都无法找到箱子或给出未解决的导入错误。

我还尝试将包含 2 个发布函数的代码放入 /src/mnemonic.rs

并在 /src/main.rs 中放置:

use mnemonic;

我也试过将我的代码放在 mnemonic/src/lib.rs 中并尝试 extern crate mnemonic; use mnemonic; 来自 src/main.rs

我是否应该在您提出的任何情况下编辑 Cargo.toml

更新答案

是的,您需要告诉 Cargo 在哪里可以找到您的箱子。在您的二进制文件 Cargo.toml 中,添加如下内容:

[dependencies.mnemonic]
path = "./mnemonic"

原答案

当您创建一个新的 crate 时,它​​会自动具有一层命名空间:crate 本身的名称。此外,如果它是您当前的箱子,则不需要 extern use 箱子!

使用来自其他 crate

的 crate mnemonic

这可能是您想要做的:创建一个名为 mnemonic 的新 crate,然后您将拥有一个 src/lib.rs。将您的代码放在那里,然后您可以使用 other crates

extern crate mnemonic;
use mnemonic::ItemInLibDotRs; // Make sure this item is marked as `pub`!

使用板条箱 mnemonic

中的嵌套模块 mnemonic

假设您有一些要对最终用户隐藏的实现细节。我们将把它放在 crate 中的一个模块中,并且 仅在同一个 crate.

中使用它

将您的代码放入 src/mnemonic.rs。在 src/lib.rs 中,您将引用该模块和项目:

use mnemonic::ItemInMnemonic; // Make sure this is `pub`!
mod mnemonic;

在其他 crate

中使用 crate mnemonic 中的嵌套模块 mnemonic

从你的 crate 中导出模块,然后从 other crates:

引用它
// src/lib.rs
pub mod mnemonic; // Note the module is now public

// In the crate that consumes mnemonic
extern crate mnemonic;
use mnemonic::mnemonic::ItemInMnemonic;

虽然最后一个选项有点难看,但您可能不想让您的用户键入 mnemonic::mnemonic,这就是为什么我建议将它放在 src/lib.rs.[=27= 中的原因]