如何使用新的本地模块?

时间:2015-01-14 16:10:17

标签: module rust rust-cargo

我无法导入和使用我写过的模块,不知道我哪里出错了。

我的起始目录结构是:

/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中(我想从main使用2个公共函数)。我从cargo build开始mnemonic/然后回到我的主src,我尝试了

extern crate mnemonic;

use mnemonic;

我也试过use mnemonic::mnemonic;

在所有情况下,它无法找到包或未解决的导入错误。

我也尝试将包含2个pub功能的代码放在/src/mnemonic.rs

并在/src/main.rs投放:

use mnemonic;

我还尝试将代码放入mnemonic/src/lib.rs并尝试extern crate mnemonic; use mnemonic;中的src/main.rs

我是否应该在您建议的任何实例中编辑Cargo.toml

1 个答案:

答案 0 :(得分:3)

更新答案

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

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

原始答案

当您创建新的包时,它会自动拥有一层命名空间:包装箱本身的名称。另外,如果是您当前的箱子,您不需要extern use箱子!

使用来自其他包装箱的箱子mnemonic

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

一起使用它
extern crate mnemonic;
use mnemonic::ItemInLibDotRs; // Make sure this item is marked as `pub`!

使用来自包mnemonic

的嵌套模块mnemonic

假设您要从最终用户隐藏一些实施细节。我们将把它放在包中的模块中,并且只在同一个包中使用

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

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

在其他包装箱中使用来自包mnemonic的嵌套模块mnemonic

从您的包中导出模块,然后从其他包装箱中引用该模块:

// 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中。