![](/img/trans.png)
[英]How to include files from same directory in a module using Cargo/Rust?
[英]How to use one module from another module in a Rust cargo project?
有很多关于使用模块的 Rust文档,但我还没有找到具有多个模块的 Cargo 二进制文件的示例,其中一个模块使用另一个模块。 我的示例在 src 文件夹中包含三个文件。 模块 a 和 b 处于同一级别。 一个不是另一个的子模块。
主.rs:
mod a;
fn main() {
println!("Hello, world!");
a::a();
}
答:
pub fn a() {
println!("A");
b::b();
}
和 b.rs:
pub fn b() {
println!("B");
}
我在 a.rs 中尝试了use b
和mod b
的变体,但我无法编译此代码。 例如,如果我尝试使用use b
,我会收到以下错误:
--> src/a.rs:1:5
|
1 | use b;
| ^ no `b` in the root. Did you mean to use `a`?
让 Rust 认识到我想在货物应用程序中使用模块 a 中的模块 b 的正确方法是什么?
您必须在某处包含b.rs
,通常使用mod b;
. 如果b
是一个孩子a
(而不是被的兄弟a
),有两种方法可以做到这一点:
a.rs
到a/mod.rs
和b.rs
到a/b.rs
。 然后你可以修改mod b;
在a/mod.rs
。#[path = "b.rs"] mod b;
在a.rs
无需重命名源。 如果b
旨在成为的兄弟a
(而不是被一个孩子a
),你可以mod b;
在main.rs
,然后use crate::b;
在a.rs
接受的答案中的方法在 Rust 1.33 中对我不起作用。 相反,我像这样使用兄弟模块:
use crate::b;
在最新的 Rust 1.63 中,我们可以使用super关键字来引用兄弟姐妹
// main.rs
mod a;
mod b;
fn main() {
}
// a.rs
pub fn a() {
println!("A");
super::b::b();
}
// b.rs
pub fn b() {
println!("B");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.