核心概念说明
-
包(Package)
-
是 Cargo 管理的项目单位,包含一个
Cargo.toml
配置文件 -
一个包可以包含:
- 最多一个库 crate(
src/lib.rs
) - 任意数量的二进制 crate(
src/main.rs
或src/bin/
目录下的文件)
- 最多一个库 crate(
-
示例中的
Cargo.toml
定义了一个名为code_org_demo
的包
-
-
Crate
-
是 Rust 的编译单位,分为两种类型:
- 库 crate(Library crate):提供可被其他 crate 使用的功能,入口是
src/lib.rs
- 二进制 crate(Binary crate):可执行程序,入口是
src/main.rs
- 库 crate(Library crate):提供可被其他 crate 使用的功能,入口是
-
示例中包含一个库 crate(
src/lib.rs
)和一个二进制 crate(src/main.rs
)
-
-
模块(Module)
-
使用
mod
关键字定义,用于组织 crate 内部的代码 -
可以嵌套定义,形成模块树结构
-
示例中的模块结构:
plaintext
csharpcode_org_demo ├── math │ ├── basic │ └── advanced ├── user └── internal
-
-
可见性控制(
pub
)- Rust 默认所有项(模块、函数、结构体等)都是私有的
pub
:将项设为公共,允许外部访问pub(crate)
:仅在当前 crate 内可见pub(super)
:仅在父模块内可见pub(in path)
:仅在指定路径的模块内可见
-
路径与引用(
use
、as
)-
use
:引入模块或项,简化代码中的路径引用 -
as
:为导入的项创建别名,解决命名冲突 -
路径类型:
- 绝对路径:从 crate 根开始(如
crate::math::advanced
) - 相对路径:使用
self
(当前模块)和super
(父模块)
- 绝对路径:从 crate 根开始(如
-
-
常用导入方式
- 导入单个项:
use module::item;
- 导入多个项:
use module::{item1, item2};
- 导入所有公共项:
use module::*;
(通配符导入) - 嵌套导入:
use module::submodule::item;
- 导入单个项:
二:代码编写 1.创建项目目录结构:
css
code_org_demo/
├── Cargo.toml
└── src/
├── lib.rs
└── main.rs
lib.rs 代码
rust
//! 代码组织演示库
//! 包含数学工具和用户管理功能
// 定义公共模块 math
pub mod math {
// 子模块 basic(默认私有,仅在math模块内可见)
mod basic {
// 私有函数(仅在basic模块内可见)
fn add(a: i32, b: i32) -> i32 {
a + b
}
// 公共函数(在父模块可见)
pub fn subtract(a: i32, b: i32) -> i32 {
a - b
}
// 限制可见性:仅在crate内可见
pub(crate) fn multiply(a: i32, b: i32) -> i32 {
a * b
}
}
// 公共子模块 advanced
pub mod advanced {
// 使用父模块的功能(super指向math模块)
use super::basic::multiply;
/// 计算平方
pub fn square(x: i32) -> i32 {
multiply(x, x)
}
/// 计算立方
pub fn cube(x: i32) -> i32 {
multiply(multiply(x, x), x)
}
}
// 公共API:暴露basic模块的部分功能
pub use self::basic::subtract;
}
// 定义用户相关模块
pub mod user {
/// 用户结构体
#[derive(Debug)]
pub struct User {
name: String,
age: u32,
}
impl User {
/// 创建新用户
pub fn new(name: String, age: u32) -> Self {
User { name, age }
}
/// 获取用户名
pub fn get_name(&self) -> &str {
&self.name
}
/// 获取年龄
pub fn get_age(&self) -> u32 {
self.age
}
}
// 内部工具函数(私有)
fn validate_age(age: u32) -> bool {
age > 0 && age <= 150
}
}
// 私有模块:仅在当前crate内可见
mod internal {
pub fn helper() -> &'static str {
"这是内部辅助函数"
}
}
rust
//! 代码组织演示主程序
// 引入当前crate的库(lib.rs中定义的内容)
use code_org_demo::math;
use code_org_demo::user::User;
// 使用as关键字为导入项创建别名
use code_org_demo::math::advanced as adv_math;
fn main() {
// 使用math模块的功能
println!("10 - 3 = {}", math::subtract(10, 3));
println!("5的平方 = {}", adv_math::square(5));
println!("3的立方 = {}", adv_math::cube(3));
// 使用user模块的功能
let user = User::new("Alice".to_string(), 30);
println!("用户: {}, 年龄: {}", user.get_name(), user.get_age());
// 使用通配符*导入所有公共项
use code_org_demo::math::advanced::*;
println!("4的平方 = {}", square(4));
// 访问内部模块(仅在同一crate内可见)
println!("内部功能: {}", code_org_demo::internal::helper());
}