Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

注释

Syntax
LINE_COMMENT
      // ( ~[/ ! LF] | // ) ~LF*
    | //

BLOCK_COMMENT
      /*
        ( ~[* !] | ** | BLOCK_COMMENT_OR_DOC )
        ( BLOCK_COMMENT_OR_DOC | ~*/ )*
      */
    | /**/
    | /***/

INNER_LINE_DOC
    //! ~[LF CR]*

INNER_BLOCK_DOC
    /*! ( BLOCK_COMMENT_OR_DOC | ~[*/ CR] )* */

OUTER_LINE_DOC
    /// ( ~/ ~[LF CR]* )?

OUTER_BLOCK_DOC
    /**
      ( ~* | BLOCK_COMMENT_OR_DOC )
      ( BLOCK_COMMENT_OR_DOC | ~[*/ CR] )*
    */

BLOCK_COMMENT_OR_DOC
      BLOCK_COMMENT
    | OUTER_BLOCK_DOC
    | INNER_BLOCK_DOC

LINE_COMMENT // ⚠️ with the exception of / ! LF CHAR // ⚠️ with the exception of LF CHAR //
BLOCK_COMMENT /* ⚠️ with the exception of * ! CHAR ** BLOCK_COMMENT_OR_DOC BLOCK_COMMENT_OR_DOC ⚠️ with the exception of */ CHAR */ /**/ /***/
INNER_LINE_DOC //! ⚠️ with the exception of LF CR CHAR
INNER_BLOCK_DOC /*! BLOCK_COMMENT_OR_DOC ⚠️ with the exception of */ CR CHAR */
OUTER_LINE_DOC /// ⚠️ with the exception of / CHAR ⚠️ with the exception of LF CR CHAR
OUTER_BLOCK_DOC /** ⚠️ with the exception of * CHAR BLOCK_COMMENT_OR_DOC BLOCK_COMMENT_OR_DOC ⚠️ with the exception of */ CR CHAR */

非文档注释

注释遵循C++风格的单行注释(//)和块注释(/* ... */)形式。支持嵌套的块注释。

非文档注释被解释为一种空白字符。

文档注释

以恰好_三_个斜杠(///)开头的行文档注释,以及块文档注释(/** ... */),这两种都是外部文档注释,被解释为doc属性的一种特殊语法格式。

也就是说,它们等价于在注释主体周围编写#[doc="..."],例如,/// Foo 变为#[doc="Foo"]/** Bar */ 变为#[doc="Bar"]。因此,它们必须出现在接受外部属性的项之前。

//!开头的行注释和/*! ... */块注释是文档注释,它们应用于注释的父级,而不是紧随其后的项。

也就是说,它们等价于在注释主体周围编写#![doc="..."]//!注释通常用于文档化占据一个源文件的模块。

字符U+000D(CR)不允许出现在文档注释中。

注意

按照惯例,文档注释包含Markdown,这是rustdoc所期望的。然而,注释语法格式不识别任何内部Markdown。/** \glob = “/.rs”;` / 会在第一个/`处终止注释,其余代码将导致语法格式错误。与行文档注释相比,这稍微限制了块文档注释的内容。

注意

序列U+000D(CR)紧跟U+000A(LF)在之前会被转换为单个U+000A(LF)。

示例

#![allow(unused)]
fn main() {
//! 适用于此crate的隐式匿名模块的文档注释

pub mod outer_module {

    //!  - 内部行级文档注释
    //!! - 仍然是内部行级文档注释(但开头带感叹号)

    /*!  - 内部块级文档注释 */
    /*!! - 仍然是内部块级文档注释(但开头带感叹号) */

    //   - 仅是普通注释
    ///  - 外部行级文档注释(恰好三个斜杠)
    //// - 仅是普通注释

    /*   - 仅是普通注释 */
    /**  - 外部块级文档注释(恰好两个星号) */
    /*** - 仅是普通注释 */

    pub mod inner_module {}

    pub mod nested_comments {
        /* 在 Rust 中 /* 我们可以 /* 嵌套注释 */ */ */

        // 所有三种块级注释都可以包含或嵌套在
        // 任何其他类型的注释中:

        /*   /* */  /** */  /*! */  */
        /*!  /* */  /** */  /*! */  */
        /**  /* */  /** */  /*! */  */
        pub mod dummy_item {}
    }

    pub mod degenerate_cases {
        // 空的内部行级文档注释
        //!

        // 空的内部块级文档注释
        /*!*/

        // 空的行级注释
        //

        // 空的外部行级文档注释
        ///

        // 空的块级注释
        /**/

        pub mod dummy_item {}

        // 空的两个星号的块注释不是文档块,它是普通的块注释
        /***/

    }

    /* 下一个是不允许的,因为外部文档注释
       需要一个接收文档的条目 */

    /// 我的条目在哪里?
  mod boo {}
}
}