Rust项目中函数导入存在冗余感,寻求优化方案
解决Rust项目中函数导入冗余的问题
你的核心问题是误解了Cargo项目里**库箱(library crate)和二进制箱(binary crate)**的关系:src/lib.rs是独立的库箱入口,不需要在main.rs中用mod lib;声明,这一步完全多余。
正确实现方式
在Cargo项目中,src/main.rs(二进制箱)可以直接引用同一项目下src/lib.rs(库箱)的公共内容,只需通过项目的箱名导入即可(箱名默认是Cargo.toml里name字段的值)。
修改后的main.rs代码
假设你的项目在Cargo.toml里的name为med_calculator,代码应写成:
// 移除多余的mod lib; use med_calculator::calc::med_calc; fn main() { let mut numbers = vec![1,21,22,4,2]; med_calc(&mut numbers); }
原写法不合理的原因
mod xxx;语法用于在同一个箱内部声明子模块(比如lib.rs引用同目录下的calc.rs文件时,才需要写pub mod calc;)。但src/lib.rs本身是独立的库箱,和src/main.rs属于同一项目下的两个不同箱,不需要用子模块的方式引入。
验证步骤
- 确认
Cargo.toml里的name字段,示例:
[package] name = "med_calculator" version = "0.1.0" edition = "2021"
- 运行
cargo run,代码可正常编译执行,功能和原写法完全一致,且去掉了冗余声明。
额外优化建议
如果不想每次写完整路径,可直接将函数导入当前作用域:
use med_calculator::calc::med_calc; // 若有多个公共函数需使用,也可通配符导入整个calc模块 // use med_calculator::calc::*;
内容的提问来源于stack exchange,提问作者Mats Janssens
相关产品推荐
相关产品推荐

