0

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

我的起始目录结构是:

/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 个我想从中使用的公共函数main)。我在我的主要 src 中跑来跑去cargo buildmnemonic/我试过了

extern crate mnemonic;

use mnemonic;

我也试过use mnemonic::mnemonic

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

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

/src/main.rs提出:

use mnemonic;

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

我应该Cargo.toml在您提出的任何情况下进行编辑吗?

4

1 回答 1

3

更新的答案

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

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

原始答案

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

使用mnemonic来自其他 crate 的 crate

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

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

使用mnemoniccrate 中的嵌套模块mnemonic

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

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

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

在其他crate 中使用mnemoniccrate中的嵌套模块mnemonic

从您的 crate 中导出模块,然后从其他 crate中引用它:

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

于 2015-01-14T16:18:35.467 回答