Rust 中的注释

2023-11-02

Rust 中的注释分为两种:

  • 普通注释 – 仅做注释用,在编译时编译器会忽略它们。
  • 文档注释 – 可以通过命令生成 HTML 帮助文档。

普通注释

Rust 的普通注释与 C++ 的风格一样,分为:

  • 单行注释 – 以 // 开头,// 后的内容都会被注释掉。
  • 块注释 – 可以注释多行,并且可以嵌套,使用 /* ... */ 将注释内容与代码分隔。

示例

fn main() {
    // 这是行注释

    /* 这是块注释,
    可以注释多行。*/

    /*
     * 这也是块注释
     * 该行前面的星号不是必须的
     * 但这样比较好看
     */

    /* 块注释可以嵌套 /* 嵌套有什么用? */ 我很疑惑 */

    // 块注释可以注释掉一行中间的部分代码,行注释则没有这个能力
    let x = 5 + /* 90 + */ 5;
    println!("Is `x` 10 or 100? x = {}", x);
}

文档注释

文档注释也分为单行注释和块注释,但又有内外之分:

  • 内部文档注释(Inner doc comment)
    • 单行注释(以 /// 开头)
    • 块注释(用 /** ... */ 分隔)
  • 外部文档注释(Outer doc comment)
    • 单行注释(以 //! 开头)
    • 块注释(用 /*! ... */ 分隔)

二者的区别:

  • 内部文档注释是对它之后的项做注释,与使用 #[doc="..."] 是等价的。
  • 外部文档注释是对它所在的项做注释,与使用 #![doc="..."] 是等价的。

另外,在文档注释中可以使用 Markdown 语法。

示例:
使用 cargo new comment --lib 创建一个项目,下面的代码 src/lib.rs 是文件中的内容。

//! # Comment
//! 外部文档注释--描述包含它的项,一般用来编写 Crate 的文档注释。

/// - 内部文档注释 -- `outer_module` 的单行注释1
/** - 内部文档注释 -- `outer_module` 的块注释1 */
pub mod outer_module {

    //! - 外部文档注释 -- `outer_module` 的单行注释2
    /*! - 外部文档注释 -- `outer_module` 的块注释2 */

    /// - 内部文档注释 -- `inner_module` 的单行注释
    /** - 内部文档注释 -- `inner_module` 的块注释 */
    pub mod inner_module {}

    /// 这是代表人类一个结构体
    pub struct Person {
        /// 一个人必须有名字
        name: String,
    }

    impl Person {
        /// 返回具有指定名字的一个人
        ///
        /// # 参数
        ///
        /// * `name` - 字符串切片,代表人的名字
        ///
        /// # 示例
        ///
        /// ```
        /// // 在文档注释中,可以编写代码块
        /// // 如果向 Rustdoc 传递 --test 参数,它还会帮你测试注释文档中的代码!
        /// use comment::Person;
        /// let person = Person::new("name");
        /// ```
        pub fn new(name: &str) -> Person {
            Person {
                name: name.to_string(),
            }
        }
    }
}

使用 cargo doc 命令可以生成 Rust 项目的 HTML 帮助文档,上面的示例生成的文档如下图所示:

comment Crate 的文档
crate
outer_module 模块的文档
outer_module

Person 结构体的文档
Person

相关资料

The Rust Reference

The rustdoc book

Rust By Example

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 中的注释 的相关文章

随机推荐

  • 多维时序

    多维时序 MATLAB实现GWO GRU灰狼算法优化门控循环单元的多变量时间序列预测 目录 多维时序 MATLAB实现GWO GRU灰狼算法优化门控循环单元的多变量时间序列预测 预测效果 基本介绍 程序设计 参考资料 预测效果 基本介绍 M
  • homestead实现外部局域网络其他主机的访问

    homestead 2 0 MAC环境 修改Homestead目录下的Vagrantfile文件 加上这么一行 config vm network public network ip 192 168 1 XXX IP地址为该局域网内其他未被
  • 手把手教你写购物车(完整篇1)

    购物车的设计与思路 1 在做任何业务的时候 首先要做的是把思路的流程捋清楚 再进行代码的编写 以及实现 2 对业务涉及到的技术 如果没接触过的 首先要学习至会用为止 3 如果思路不是很清楚的 可以查找类似的案列情况 学习思路流程 4 具体的
  • 攻克3D神器Blender的第五天-【多边形建形、旋转】

    目录 前言回顾 功能预览 多边形建形 旋转 前言回顾 不熟悉快捷键属性的可以点击传送门预览 传送门 官网地址 传送门 攻克3D神器Blender的第一天 快捷键 传送门 攻克3D神器Blender的第二天 挤出 传送门 攻克3D神器Blen
  • 笔记:《深入浅出统计学》第五章:概率分布(均值、方差、线性变换)

    随机变量的概率分布是描述随机变量取所有不同值的概率 对于随机变量x 概率函数给出随机变量取每一种值的概率 记f x 离散型概率函数的基本条件 1 对于任意随机变量的取值 函数值都是大于等于0 2 随机变量的所有取值对应的概率之和为1 常见的
  • 【C语言】符号常量(#define)

    举例 define XY RX 100 用法 define 标识符 常量 其中 标识符一般全大写 单词之间用 下划线分割
  • gin库的的理解以及简单使用

    gin库的作用 在实验当中 可能存在同一模型下使用不同的数据集参数进行训练时 就需要多次输入一些相同类型的参数 从而造成时间的浪费 gin库就是为了统一化操作这些参数而出现的 它允许函数或类被注释为 gin configurable 这样就
  • 微信小程序(typescript) npm添加Tdesign UI组件库

    最近 发现一个新的微信小程序UI组件库 TDesign 腾讯自家出品 颜值杠杆 网址如下 https tdesign tencent com miniprogram getting started 安装 使用NPM Node js 安装包及
  • Java使用Aspose-Words实现Word转换Pdf

    一 在项目中引入Aspose Words依赖 下载地址 http pan baidu com s 1nvbJwnv 建议将jar包下载下来并上传到自己公司的私服里去
  • 【 OJ 】 HDOJ1052 贪心模拟田忌赛马 [ 46 ]

    转自 https www cnblogs com Open Source archive 2010 07 09 1904940 html 解题思路 贪心算法 根本思想是要让田忌花最小的代价来胜一每一场 让齐王花最大的代价来胜每一场 代价 可
  • 怎样用matlab产生泊松分布随机数

    random Poisson Lambda random Poisson Lambda m n 泊松分布的参数为Lambda 如果只产生一个随机数就是第一句的样子第二行的语句表示会产生m n个随机数 且这些随机数组成了m行n列的矩阵matl
  • C++基础知识 - 类模板与友元函数

    类模板与友元函数 Demo h pragma once template
  • SSM框架整合&配置环境&简单测试

    项目结构目录 第一步 导入ssm框架所需坐标 比如spring springmvc mybatis
  • 电子合同 数字签名项目记录

    项目页面 项目实现遇到的问题 在开发过程中遇到两个问题 前台 后台的签字展示大小和签字图片和合同原件合并的字体生成大小 签字生成的图片大小 最小化 不能是canvas画布的大小 第一个问题 针对第一个问题 如果不解决这个问题 在签字页面展示
  • Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言 支持继承 封装和多态三大基本特征 首先我们从面向对象两大概念 类和对象 也称为实例 谈起 来看看最基本的类定义语法 命名规则 类名 首字母大写 多个单词组合时每个单词首字母大写 单词之间不加任何连接符号
  • vue axios 阻塞未完成请求

    import from lodash import axios from axios const CancelToken Cancel axios const tokens 请求前处理 config 尽可能在最先注册的拦截器中调用 para
  • ThreeJS-3D教学一基础场景创建

    Three js 是一个开源的 JS 3D 图形库 用于创建和展示高性能 交互式的 3D 图形场景 它建立在 WebGL 技术之上 并提供了丰富的功能和工具 使开发者可以轻松地构建令人惊叹的 3D 可视化效果 Three js 提供了一套完
  • 深入完整的带你了解java对象的比较

    目录 元素的比较 1 基本类型的比较 2 对象比较的问题 1 运行结果 2 疑问 3 原因 对象的比较 1 覆写基类的equals 2 基于Comparble接口类的比较 3 基于比较器比较 4 三种方式对比 元素的比较 1 基本类型的比较
  • 棋子翻转---- 美团2016研发工程师在线编程题

    编程题 棋子翻转 在4x4的棋盘上摆满了黑白棋子 黑白两色的位置和数目随机其中左上角坐标为 1 1 右下角坐标为 4 4 现在依次有一些翻转操作 要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转 请计算出翻转后的棋盘颜色 给定两个
  • Rust 中的注释

    Rust 中的注释分为两种 普通注释 仅做注释用 在编译时编译器会忽略它们 文档注释 可以通过命令生成 HTML 帮助文档 普通注释 Rust 的普通注释与 C 的风格一样 分为 单行注释 以 开头 后的内容都会被注释掉 块注释 可以注释多