Trait和Trait Object

從多種數據類型中抽取出這些類型之間可通用的方法或屬性,並將它們放進另一個相對更抽象的類型中,是一種很好的代碼複用方式,也是多態的一種體現方式。

在面嚮對象語言中,這種功能一般通過接口(interface)實現。在Rust中,這種功能通過Trait實現。Trait類似於其他語言中接口的概念。例如,Trait可以被其他具體的類型實現(implement),也可以在Trait中定義一些方法,實現該Trait的類型都必須實現這些方法。

嚴格來說,Rust中Trait的作用主要體現在兩方面:

  • Trait類型:用於定義抽象行為,抽取那些共性的屬性,主要表現是作為泛型的數據類型(對泛型進行限制)
  • Trait對象:即Trait Object,能用於多態

總之,Trait很重要,說是Rust的基石也不為過,它貫穿於整個Rust。本章介紹Trait最基本的內容,更多內容將在後面的泛型章節中展開。

Trait通常翻譯為【特性】、【特徵】、【特質】,但這些翻譯都很尷尬,特別是將特性或特質等這種名詞寫進文章時,更顯彆扭。

因此對於Trait這種重要的術語,我不打算做任何轉換,直接在文中使用英文原單詞。