名称
一个 实体(entity) 是一种语言结构,它在源程序中可以以某种方式被引用,通常是通过 路径 。实体包括 类型 、 项 、 泛型参数 、 变量绑定 、 循环标签 、 生命周期 、 字段 、 属性 以及 lint 。
一个 声明(declaration) 是一种语法结构,它可以引入一个 名称(name) 来引用实体。实体名称在 作用域 内有效 — 即该名称可以被引用的源文本区域。
某些实体在源码中被 显式声明 ,而某些实体作为语言或编译器扩展的一部分被 隐式声明 。
路径 用于引用实体,可能是在另一个模块或类型中。
生命周期和循环标签使用一种 专用语法 ,带有一个前导引号。
名称被隔离在不同的 命名空间 中,允许不同命名空间中的实体共享相同的名称而不会发生冲突。
名称解析 是将路径、标识符和标签绑定到实体声明的编译时过程。
对某些名称的访问可能会基于它们的 可见性 受到限制。
显式声明的实体
在源码中显式引入名称的实体有:
- 项 :
let语句 模式绑定
macro_use属性 可以引入来自另一个 crate 的宏名称
macro_export属性 可以为宏向 crate 根部引入一个别名
此外, 宏调用 和 属性 可以通过展开为上述项之一来引入名称。
隐式声明的实体
以下实体由语言隐式定义,或由编译器选项和扩展引入:
- 语言预导入 :
- 标准库预导入 项、属性和宏
- 根模块中的 标准库 crate
- 由编译器链接的 外部 crate
- 派生辅助属性 在项内有效,无需显式导入
'static生命周期
此外,crate 根模块没有名称,但可以使用某些 路径限定符 或别名来引用。