文档注释与 rustdoc
学习目标
- 掌握文档注释语法
- 学会生成文档
- 掌握常用文档属性
核心概念
文档注释
/// 计算矩形面积
///
/// # Arguments
///
/// * `width` - 宽度
/// * `height` - 高度
///
/// # Examples
///
/// ```
/// let area = my_lib::area(10.0, 5.0);
/// assert_eq!(area, 50.0);
/// ```
///
/// # Panics
///
/// 如果宽度或高度为负数会 panic。
pub fn area(width: f64, height: f64) -> f64 {
assert!(width >= 0.0 && height >= 0.0);
width * height
}
常用章节
/// # Examples - 示例
/// # Arguments - 参数说明
/// # Returns - 返回值说明
/// # Panics - panic 条件
/// # Errors - 错误说明
/// # Safety - unsafe 说明
/// # Section - 自定义章节
文档属性
// 隐藏文档测试中的行
/// ```
/// # // 以 # 开头的行在文档中隐藏
/// # use my_lib::add;
/// let result = add(1, 2);
/// assert_eq!(result, 3);
/// ```
// 忽略文档测试
/// ```ignore
/// 这不会被测试
/// ```
// 不编译,只展示
/// ```no_run
/// loop { } // 不会运行
/// ```
模块文档
//! # My Library
//!
//! 这是我的库的描述。
//!
//! ## 用法
//!
//! ```rust
//! use my_lib::add;
//! ```
/// 子模块文档
pub mod utils { }
生成文档
cargo doc # 生成文档
cargo doc --open # 生成并打开
cargo doc --no-deps # 不包含依赖文档
实践练习
练习 1:为函数写文档
/// 计算斐波那契数列第 n 项。
///
/// # Arguments
///
/// * `n` - 项数(从 0 开始)
///
/// # Examples
///
/// ```
/// assert_eq!(my_lib::fibonacci(0), 0);
/// assert_eq!(my_lib::fibonacci(1), 1);
/// assert_eq!(my_lib::fibonacci(10), 55);
/// ```
pub fn fibonacci(n: u32) -> u64 {
match n {
0 => 0,
1 => 1,
_ => {
let mut a = 0u64;
let mut b = 1u64;
for _ in 2..=n {
let temp = a + b;
a = b;
b = temp;
}
b
}
}
}
小结
| 语法 | 用途 |
|---|---|
/// | 函数/结构体文档 |
//! | 模块/crate 文档 |
# Examples | 示例章节 |
cargo doc --open | 生成并查看文档 |