我无法导入和使用我写过的模块,不知道我哪里出错了。
我的起始目录结构是:
/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
?
答案 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
中。