35·工程化入门

文档注释与 rustdoc

文档注释与 rustdoc

学习目标

  1. 掌握文档注释语法
  2. 学会生成文档
  3. 掌握常用文档属性

核心概念

文档注释

/// 计算矩形面积
///
/// # 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生成并查看文档

练习编辑器

rust
Loading...