如何使用新的本地模块?
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= 中的原因]
我无法导入和使用我编写的模块,不确定哪里出错了。
我的起始目录结构是:
/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
的 cratemnemonic
这可能是您想要做的:创建一个名为 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
中使用 cratemnemonic
中的嵌套模块 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= 中的原因]