关于使用模块有很多问题,但我还没有发现一个Cargo二进制文件有多个模块,一个模块使用另一个模块的例子.我的示例在src文件夹中有三个文件.模块a和b处于同一级别.一个不是另一个的子模块.

主要的rs:

mod a;

fn main() {
    println!("Hello, world!");
    a::a();
}

a、 rs:

pub fn a() {
    println!("A");
    b::b();
}

b.R.:

pub fn b() {
    println!("B");
}

我在a.rs中try 了use bmod b的变体,但我无法编译这段代码.例如,如果我try 使用use b,我会得到以下错误:

 --> src/a、 rs:1:5
  |
1 | use b;
  |     ^ no `b` in the root. Did you mean to use `a`?

让Rust认识到我想在cargo应用程序中使用模块a中的模块b的正确方法是什么?

推荐答案

你必须在某处包含b.rs个,通常是mod b;个.如果ba岁的子元素(而不是a岁的sibling 姐妹),有两种方法:

  • Recommended:将a.rs重命名为a/mod.rs,将b.rs重命名为a/b.rs.然后你可以在a/mod.rs中 Select mod b;.
  • 取而代之的是,你可以在不重命名源的情况下,在a.rs中只取#[path = "b.rs"] mod b;.

如果ba的sibling 姐妹(而不是a的子元素),那么你可以在main.rs中 Select mod b;,然后在a.rs中 Select use crate::b;.

Rust相关问答推荐

go 掉包装 struct 中的泛型

我怎样才能从一个Rust 的日期中go 掉3年?

什么是Rust惯用的方式来使特征向量具有单个向量项的别名?

我如何在Rust中使用传递依赖中的特征?

当两者都有效时,为什么Rust编译器建议添加';&;而不是';*';?

无法理解铁 rust &S错误处理

如何在 struct 的自定义序列化程序中使用serde序列化_WITH

integer cast as pointer是什么意思

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

除了调用`waker.wake()`之外,我如何才能确保future 将再次被轮询?

循环访问枚举中的不同集合

可以在旋转循环中调用try_recv()吗?

在 Rust 中查找向量中 dyn struct 的索引

面临意外的未对齐指针取消引用:地址必须是 0x8 的倍数,但为 0x__错误

Rust中的位移操作对范围有什么影响?

有没有办法隐式绑定 let/match 操作的成员?

为什么 `tokio::join!` 宏不需要 Rust 中的 `await` 关键字?

内部值发生变化时 Rc 的行为

无法理解 Rust 对临时值的不可变和可变引用是如何被删除的

在同一向量 Rust 中用另一个字符串扩展一个字符串