01-类型

类型 — The Rust Reference

译文 · 基于 The Rust Reference

原文链接: https://doc.rust-lang.org/reference/types.html

r[type]

类型

r[type.intro] Rust 程序中的每个变量、项和值都有一个类型。值的类型定义了保存该值的内存如何被解释,以及可以对它执行哪些操作。

r[type.builtin] 内置类型与语言紧密集成,其方式并非平凡,无法用用户定义类型来完全模拟。

r[type.user-defined] 用户定义类型的能力有限。

r[type.kinds] 类型列表如下:

r[type.name]

类型表达式

r[type.name.syntax]

Type ->
      TypeNoBounds
    | ImplTraitType
    | TraitObjectType

TypeNoBounds ->
      ParenthesizedType
    | ImplTraitTypeOneBound
    | TraitObjectTypeOneBound
    | TypePath
    | TupleType
    | NeverType
    | RawPointerType
    | ReferenceType
    | ArrayType
    | SliceType
    | InferredType
    | QualifiedPathInType
    | BareFunctionType
    | MacroInvocation

r[type.name.intro] 上文 [Type] 文法规则所定义的类型表达式是引用类型的语法。它可以引用:

r[type.name.sequence]

r[type.name.path]

r[type.name.pointer]

r[type.name.inference]

r[type.name.grouped]

r[type.name.trait]

r[type.name.never]

r[type.name.macro-expansion]

  • 展开为类型表达式的宏。

r[type.name.parenthesized]

括号类型

r[type.name.parenthesized.syntax]

ParenthesizedType -> `(` Type `)`

r[type.name.parenthesized.intro] 在某些情况下,类型的组合可能产生歧义。在类型外加括号可避免歧义。例如,引用类型中用于类型边界的 + 运算符,其边界作用范围并不清楚,因此必须使用括号。需要这种消歧的文法规则使用 [TypeNoBounds] 规则,而不是 [Type][grammar-Type]。

1
2
## use std::any::Any;
type T<'a> = &'a (dyn Any + Send);

r[type.recursive]

递归类型

r[type.recursive.intro] 指名类型——结构体、枚举和联合体——可以是递归的。也就是说,每个 enum 变体或 struct/union 字段都可以直接或间接地引用包围它的 enum 或 struct 类型本身。

r[type.recursive.constraint] 这种递归有如下限制:

  • 递归类型必须在递归中包含指名类型(不能仅仅是类型别名,或其他结构类型,如数组或元组)。因此不允许 type Rec = &'static [Rec]。
  • 递归类型的大小必须是有限的;换句话说,该类型的递归字段必须是指针类型。

递归类型及其使用示例:

1
2
3
4
5
6
enum List<T> {
    Nil,
    Cons(T, Box<List<T>>)
}

let a: List<i32> = List::Cons(7, Box::new(List::Cons(13, Box::new(List::Nil))));

01-布尔类型

布尔类型 — The Rust Reference

02-数值类型

数值类型 — The Rust Reference

03-字符类型

字符类型 — The Rust Reference

04-字符串切片类型

字符串切片类型 — The Rust Reference

05-Never 类型

Never 类型 — The Rust Reference

06-元组类型

元组类型 — The Rust Reference

07-数组类型

数组类型 — The Rust Reference

08-切片类型

切片类型 — The Rust Reference

09-结构体类型

结构体类型 — The Rust Reference

10-枚举类型

枚举类型 — The Rust Reference

11-联合体类型

联合体类型 — The Rust Reference

12-函数项类型

函数项类型 — The Rust Reference

13-闭包类型

闭包类型 — The Rust Reference

14-指针类型

指针类型 — The Rust Reference

15-函数指针类型

函数指针类型 — The Rust Reference

16-Trait 对象类型

Trait 对象类型 — The Rust Reference

17-impl Trait 类型

impl Trait 类型 — The Rust Reference

18-类型参数

类型参数 — The Rust Reference

19-推断类型

推断类型 — The Rust Reference

最后修改 August 21, 2026: 更新 (76fc81a2e)