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

注释与文档注释

// 之后到行尾是注释。/* ... */ 是块注释,可以嵌套:

/* 外层
   /* 内层 */
   外层继续 */

块注释没有闭合时会报 unterminated block comment,并指出起始位置;它不会把文件剩下的内容静默当成注释。

块注释里还有一条额外规则:如果 // 是一行中第一个非空白内容,这一行剩下的部分全部按文本处理,其中的 */ 不再闭合注释:

/* 暂时保留旧实现
   // let cached = slow_lookup(key); */
   这一行仍然在注释里
*/

这条规则是为了注释掉本身带 */ 的代码。// 出现在一行中间时没有这个效果,它后面的 */ 照常收尾——下面这段注释在第一个 */ 处就结束了:

/* 行内的 // 不保护后面的 */ fun main() { }

文档注释

写在声明前面的 /// 或 /** ... */ 是该声明的文档:

/// 返回两点间距离的平方。
fun distance_squared(x: i32, y: i32) -> i32 {
    x * x + y * y
}

文件或模块级的说明用 //! 或 /*! ... */,通常写在文件开头:

//! 几何工具。

/*! 块形式同样有效。 */

结构体字段、枚举变体这类不能单独写前置注释的位置,可以在同一行末尾用 //<:

struct Point {
    x: i32, //< 横坐标
    y: i32, //< 纵坐标
}

//< 附着到它前面的节点。///< 不是行尾形式,它按 /// 处理并附着到后面的节点。普通 // 永远只是注释,不会成为文档。

文档注释不生成代码,也不参与类型检查。读它的是编辑器的悬停和签名帮助,以及 clue doc 生成的 HTML 文档;两处都按 Markdown 渲染标题、列表和代码围栏。