Rust函数存在但无法访问问题:如何在route_func.rs中调用simple_func.rs内的函数
Rust函数存在但无法访问问题:如何在route_func.rs中调用simple_func.rs内的函数
嘿,这个问题我之前也碰到过,本质就是Rust的模块可见性规则在搞事情——Rust默认所有模块和函数都是私有的,所以咱们得一步步搭建好模块树,同时开放正确的可见性权限。先给你理清楚操作步骤:
第一步:完善blockchain模块的结构
首先你的blockchain文件夹缺少一个mod.rs文件,这个文件是Rust识别文件夹作为模块的关键。创建blockchain/mod.rs并写入:
// blockchain/mod.rs pub mod simple_func;
这行代码的作用是把simple_func.rs声明为blockchain模块下的公开子模块,这样外部模块才能找到它。
第二步:把simple_func里的函数设为公开
Rust的函数默认是私有,哪怕模块公开了,函数还是不能被外部调用。所以修改blockchain/simple_func.rs,给需要调用的函数加上pub修饰:
// blockchain/simple_func.rs // 给要对外暴露的函数加上pub pub fn my_simple_function() { // 你的函数逻辑 println!("这是来自simple_func的函数"); }
第三步:在crate根声明公开模块
打开src/main.rs,需要把blockchain和routes都声明为公开模块,这样两个子模块之间才能互相访问:
// src/main.rs pub mod blockchain; // 公开blockchain模块,让其他模块能访问它的内容 pub mod routes; // 公开routes模块 fn main() { // 可以在这里测试调用,验证是否生效 routes::route_func::use_simple_func(); }
第四步:完善routes模块的结构
同样,routes文件夹的mod.rs需要把route_func.rs声明为公开子模块,修改routes/mod.rs:
// routes/mod.rs pub mod route_func;
第五步:在route_func.rs中导入并调用函数
现在就可以在routes/route_func.rs里通过crate的根路径访问simple_func的函数了:
// routes/route_func.rs // 从crate根导入目标函数 use crate::blockchain::simple_func::my_simple_function; pub fn use_simple_func() { // 直接调用导入的函数 my_simple_function(); // 或者也可以用完整路径调用,不需要导入: // crate::blockchain::simple_func::my_simple_function(); }
为什么这样能解决问题?
Rust的模块系统是基于"crate根"的树形结构,只有通过pub关键字开放的模块和成员,才能被树形结构中其他模块访问。咱们做的每一步都是在:
- 把文件夹注册成模块(通过
mod.rs) - 开放模块的可见性(
pub mod) - 开放函数的可见性(
pub fn) - 通过crate根路径找到目标函数
这样整套模块树就打通了,你再编译应该就不会出现"函数存在但无法访问"的错误啦。
备注:内容来源于stack exchange,提问作者Russo
相关产品推荐
相关产品推荐

