rust如何导入自己写的函数?

新手上路,请多包涵

关于rust导入函数的问题,我的工程格式如下:
src/main.rs
src/api/api.rs

api.rs 里有一个函数:
pub async fn root() {}

问题是:我该如何在main.rs下调用这个root,我试过各种文档上的方法都不行。求助各位

知道怎么导入

阅读 986
2 个回答

3种

1:

// src/api/mod.rs
pub mod api

// main.rs
pub api;
api::api::root();

2:

// src/api.rs
pub mod api

// main.rs
pub api;
api::api::root();

3:

mod api {
    pub mod api;
}

// main.rs
api::api::root();

在 Rust 中,要从一个模块导入另一个模块中的函数,你需要遵循模块系统的导入规则。对于你提到的项目结构:
src/main.rs 是程序的入口点
src/api/api.rs 包含一个公开可见的异步函数 root
为了在 main.rs 中调用 api.rs 中的 root 函数,你需要做以下几步:

  1. 声明模块: 首先,在 api.rs 文件顶部,你需要声明一个模块,通常是使用 mod 关键字:
// api.rs
pub mod api; // 假设你已经有一个名为 api 的模块,否则去掉这个 mod 关键字

pub async fn root() {
    // ...
}
  1. 导出函数: 确保 root 函数前面的 pub 关键字使其成为公共的,这样才能在外部模块中访问它。
  2. 在 main.rs 导入模块:
    在 main.rs 文件中,你需要导入 api 模块及其函数。首先,导入整个模块,然后才能使用其中的 root 函数:
// main.rs
use crate::api;

#[tokio::main]
async fn main() {
    // 调用 api 模块中的 root 函数
    api::root().await;
}

或者,如果你只想导入特定的 root 函数而不导入整个模块,可以这样做:

// main.rs
use crate::api::{root};

#[tokio::main]
async fn main() {
    root().await;
}

另外,请确保你的项目结构允许编译器找到 api.rs 文件。通常,Cargo 编译项目时会自动处理子目录中的模块,但如果遇到问题,可以尝试在 main.rs 或 lib.rs(如果有的话)中显式声明模块路径:

// main.rs
mod api; // 这告诉 Rust 编译器在同一个目录下的 api.rs 文件中查找模块

// 然后按照上面的方法导入函数

最后,确保你的项目支持异步运行,比如使用了 tokio 运行时,并且在 Cargo.toml 文件中添加了必要的依赖。如果你还没有引入异步运行时,还需要在 main.rs 中引入相关的 crates 并设置异步入口点。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进