Rust 中的Trait 定義了特定型別所具有的功能,並且可以與其他型別共享。它指定了可以在型別上呼叫的方法。
例如,假設我們有不同型別的文字資料:
- 一個NewsArticle用於新聞報導的結構
- 和一個Tweet用於推文的結構。
兩者都可以共享一個典型行為:總結內容。
我們使用Trait 來定義這種共享行為。
pub trait Summary { |
Summary 特徵Trait有一個summarize方法。任何實現此特徵的型別都必須提供此方法的自身版本。
實現Trait
要實現Trait 特徵,您需要為您的型別定義特徵指定的方法。以下是我們對 NewsArticle 和 Tweet 的操作方法。
pub struct NewsArticle { |
現在,NewsArticle 和 Tweet 都可以使用 summary 方法。這允許我們在這些型別的例項上呼叫 summary。
預設實現
Trait 特徵也可以有預設方法實現。如果我們不想為每種型別編寫相同的方法,我們可以提供一個預設值:
pub trait Summary { |
如果型別需要特定的行為,仍然可以覆蓋此預設值。
使用Trait 作為引數
Trait 特徵可用於定義函式引數。如果我們希望函式接受任何實現 Summary 的型別,我們可以這樣寫:
pub fn notify(item: &impl Summary) { |
返回實現Trait 的型別
我們還可以指定一個函式返回一個實現Trait 特徵的型別:
fn returns_summarizable() -> impl Summary { |
這使我們能夠返回符合 Summary 特徵的不同型別,而無需暴露具體型別。
條件實現
有時,您希望僅當滿足某些條件時方法才可用。Rust 允許條件實現:
impl<T: Display + PartialOrd> Pair<T> { |
這裡,僅當 T 同時實現了 Display 和 PartialOrd 時,cmp_display 才可用。
結論
Trait 特徵是 Rust 中的一項強大功能,可幫助定義和共享跨型別行為。它們使您的程式碼更加模組化、可重用且更易於理解。透過將錯誤移至編譯時,它們可確保您的程式碼穩健且高效。祝您編碼愉快!