我找不到如何将函数从一个文件(模块)包含到另一个文件(模块)中(或导入、注入或其他单词).

我开始了一个新的项目

$ cd ~/projects
$ cargo new proj --bin
$ cd proj
$ tree
.
|
-- Cargo.toml
-- src
   |
   -- main.rs

我修改了main.rs并创建了一个新的文件a.rs(在src目录中),代码如下:

main.rs

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

a.rs

pub fn foo() -> i32 { 42 }

我用cargo run运行该项目,得到错误:

error[E0433]: failed to resolve: use of undeclared type or module `a`
 --> src/main.rs:2:20
  |
2 |     println!("{}", a::foo());
  |                    ^ use of undeclared type or module `a`

似乎我需要以某种方式导入a.我试图在main.rs中添加以下内容作为第一行

  • 一百

  • 一百

  • 一百

  • 一百

  • 一百

我读了the guide本书,但仍然不知道怎么做.

推荐答案

在mainish模块(main.rs、lib.rs或subdir/mod.rs)中,您需要为要在整个项目(或subdir)中使用的所有其他模块编写mod a;.

在任何其他模块中,都需要写use a;use a::foo;

你并不是唯一一个对此感到困惑的人,当然也有可能做得更好,但对模块系统的任何更改都会被拒绝,因为"太困惑".

编辑:这个答案是为"Rust 2015"语言标准编写的.对"Rust 2018"标准进行了修改,参见this blog postedition guide

Rust相关问答推荐

go 掉包装 struct 中的泛型

trait声明中的生命周期参数

如何高效地将 struct 向量中的字段收集到单独的数组中

将一个泛型类型转换为另一个泛型类型

无法实现整型类型的泛型FN

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

在没有任何同步的情况下以非原子方式更新由宽松原子操作 Select 的值是否安全?

Rust 文件未编译到 dll 中

为什么我们有两种方法来包含 serde_derive?

如何从trait方法返回std :: iter :: Map?

从 Axum IntoResponse 获取请求标头

不能将 `*self` borrow 为不可变的,因为它也被borrow 为可变的 - 编译器真的需要如此严格吗?

如何在 use_effect_with_deps 中设置监听器内的状态?

使用部分键从 Hashmap 中检索值

我如何将特征作为 struct 的拥有字段?

在空表达式语句中移动的值

Rust 内联 asm 中的向量寄存器:不能将 `Simd` 类型的值用于内联汇编

类型组的通用枚举

如何将 while 循环内的用户输入添加到 Rust 中的向量?

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?