名称
keywords.md
commit: a989af055ff4fd7e1212754490fff72c3f7cc1be 本章译文最后维护日期:2020-1-25
*实体(entity)*是一种语言结构,在源程序中可以以某种方式被引用,通常是通过[路径(path)][paths]。实体包括类型、程序项、泛型参数、变量绑定、循环标签、生存期、字段、属性和各种lints。\
声明(declaration)是一种句法结构,它可以引入名称来引用实体。实体的名称在相关作用域(scope)内有效。作用域是指可以引用该名称的源码区域。
有些实体是在源码中显式声明的,有些则隐式声明为语言或编译器扩展的一部分。
路径用于引用实体,该引用的实体可以在其他的作用域内。生存期和循环标签使用一个带有前导单引号的专用语法来表达。
名称被分隔成不同的命名空间,这样允许不同名称空间中的实体拥有相同的名称,且不会发生冲突。
名称解析是将路径、标识符和标签绑定到实体声明的编译时过程。
对某些名称的访问可能会受到此名称的可见性的限制。
显式声明的实体
在源码中显式引入名称的实体有:
- 程序项:
- 表达式:
- 泛型参数
- 高阶trait约束
let
语句中的模式绑定macro_use
属性可以从其他 crate 里引入宏名称。macro_export
属性可以为当前宏引入一个在当前 crate 的根模块下生效的别名
此外,宏调用和属性可以通过扩展源代码到上述程序项之一来引入名称。
隐式声明的实体
以下实体由语言隐式定义,或由编译器选项和编译器扩展引入:
- 语言预导入包:
- 布尔型 —
bool
- 文本型 —
char
andstr
- 整型 —
i8
,i16
,i32
,i64
,i128
,u8
,u16
,u32
,u64
,u128
- 和机器平台相关的整型 —
usize
andisize
- 浮点型 —
f32
andf64
- 布尔型 —
- 内置属性
- 标准库预导入包里的程序项、属性和宏
- 在根模块下的标准库里的crate
- 通过编译器链接进的外部crate
- 工具类属性
- Lints 和 工具类lint属性
- 派生辅助属性无需显示引入,就在其程序项内有效
'static
生存期标签
此外,crate 的根模块没有名称,但可以使用某些路径限定符或别名来引用。