【问题标题】:How do I use a new local module?如何使用新的本地模块?
【发布时间】:2015-03-12 21:37:50
【问题描述】:

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

我的起始目录结构是:

/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 使用的公共函数)。我从mnemonic/ 运行cargo build,然后回到我的主src,我试过了

extern crate mnemonic;

use mnemonic;

我也试过use mnemonic::mnemonic

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

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

/src/main.rs 中输入:

use mnemonic;

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

我应该在您建议的任何情况下编辑Cargo.toml 吗?

【问题讨论】:

  • 您可能想在这里复习一下术语。我知道当你第一次开始使用它时会感到困惑,但是 cratemodule 之间有一个重要的区别。您在运行 cargo new 时创建了一个新的 crate。

标签: module rust rust-cargo


【解决方案1】:

更新答案

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

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

原答案

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

使用来自其他 crate 的 crate mnemonic

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

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

使用来自 crate 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 中导出模块,然后从 其他 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

【讨论】:

  • 我按照你的建议做了,把我的代码放在mnemonic/src/lib.rs。在助记符目录中运行货物构建。然后在 src/main.rs 我放了 extern crate mnemonic;使用助记符;。我收到错误“找不到用于助记符的箱子”
  • @leshow 我想我们被越过了(你的问题有点模棱两可)。我已经重新格式化了我的答案,以便更好地向您展示 3 种可能性。我认为您将 #1 和 #2 组合在一起,这没有意义。
  • 我认为我们还没有完全理解对方,我尝试了这些建议,但无法让它发挥作用,我编辑了我的原始帖子以更好地展示项目目录结构。
猜你喜欢
  • 1970-01-01
  • 2021-07-14
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 2019-10-06
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多