Trait和Trait Object

从多种数据类型中抽取出这些类型之间可通用的方法或属性,并将它们放进另一个相对更抽象的类型中,是一种很好的代码复用方式,也是多态的一种体现方式。

在面向对象语言中,这种功能一般通过接口(interface)实现。在Rust中,这种功能通过Trait实现。Trait类似于其他语言中接口的概念。例如,Trait可以被其他具体的类型实现(implement),也可以在Trait中定义一些方法,实现该Trait的类型都必须实现这些方法。

严格来说,Rust中Trait的作用主要体现在两方面:

  • Trait类型:用于定义抽象行为,抽取那些共性的属性,主要表现是作为泛型的数据类型(对泛型进行限制)
  • Trait对象:即Trait Object,能用于多态

总之,Trait很重要,说是Rust的基石也不为过,它贯穿于整个Rust。本章介绍Trait最基本的内容,更多内容将在后面的泛型章节中展开。

Trait通常翻译为【特性】、【特征】、【特质】,但这些翻译都很尴尬,特别是将特性或特质等这种名词写进文章时,更显别扭。

因此对于Trait这种重要的术语,我不打算做任何转换,直接在文中使用英文原单词。