名称
实体 是一种语言构造,可以通过某种方式在源程序中引用,通常是通过 路径 。 实体包括 类型 、 条目 、 泛型参数 、 变量绑定 、 循环标签 、 生命周期 、 字段 、 属性 和 代码分析 。
声明 是一种语法构造,可以引入 名称 来引用一个实体。实体名称在 作用域 内是有效的 —— 源文本的一个区域,可以在其中引用该名称。 一些实体在源代码中 显式声明,一些实体则作为语言或编译器扩展的一部分 隐式声明。
路径 用于引用实体,可能在另一个作用域中。生命周期和循环标签使用 专用语法,使用前导引号。
名称被分为不同的 命名空间 ,允许不同命名空间中的实体共享相同的名称而不冲突。
名称解析 是将路径、标识符和标签与实体声明联系起来的编译时过程。
根据 可见性 ,访问某些名称可能会受到限制。
显式声明的实体
在源代码中显式引入名称的实体包括:
- 条目:
- 表达式:
- 泛型参数
- 高阶 trait 约束
let
语句 的模式绑定macro_use
属性 可以引入另一个 crate 中的宏名称macro_export
属性 可以将宏的别名引入 crate 根
此外, 宏调用 和 属性 可以通过扩展为上述项之一而引入名称。
隐式声明的实体
以下实体是由语言隐式定义的,或者是由编译器选项和扩展引入的:
- 语言预定义:
- 内置属性
- 标准库预定义 条目、属性和宏
- 根模块中的 标准库 crate
- 编译器链接的 外部 crate
- 工具属性
- 代码分析 和 工具 Lint 属性
- 衍生助手属性 在条目内有效,无需显式导入
'static
生命周期
此外,crate 根模块没有名称,但可以用某些 路径限定符 或别名来引用。