You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust不同文件中调用公共函数?

Rust 跨文件模块调用的正确实现方式

首先明确核心规则:Rust的模块系统里,只有crate根文件(二进制项目是main.rs,库项目是lib.rs)可以用mod关键字声明同级文件为模块,其他子模块文件不能用mod来引入同级模块,而是要通过crate::路径来引用已经在根里声明过的模块。

你的实现思路是对的,完整的正确步骤如下:

  1. 在根文件main.rs中声明所有模块
    打开src/main.rs,在顶部添加这几行,告诉Rust这些文件属于当前crate的模块:

    mod concat_strings;
    mod time_request;
    mod start_listen;
    
  2. 暴露concat_strings.rs中的公共函数
    在src/concat_strings.rs里,给需要被外部调用的函数加上pub关键字,让它变成公共接口:

    // 示例公共函数
    pub fn combine(a: &str, b: &str) -> String {
        format!("{}{}", a, b)
    }
    
  3. 在start_listen.rs中调用公共函数
    有两种常用方式:

    • 方式一:先导入模块,再调用函数
      // 导入concat_strings模块
      use crate::concat_strings;
      
      pub fn start() {
          // 调用模块里的公共函数
          let result = concat_strings::combine("Hello", " Rust");
          println!("{}", result);
      }
      
    • 方式二:直接使用完整路径调用,无需导入
      pub fn start() {
          let result = crate::concat_strings::combine("Hello", " Rust");
          println!("{}", result);
      }
      

额外说明

  • 如果你后续要把项目改成库项目(用cargo new --lib创建),逻辑完全一致,只是根文件换成lib.rs,同样在lib.rs里用mod声明所有模块,子模块之间用crate::引用。
  • 模块名必须和文件名完全一致(大小写也要匹配),Rust会自动关联mod xxx;和xxx.rs文件。

内容的提问来源于stack exchange,提问作者userh897

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:33:19