隱含轉換

Rust 不會自動在型別間套用「隱含轉換」 (與 C++ 不同)。您可以在類似下方的程式中發現這點:

fn multiply(x: i16, y: i16) -> i16 {
    x * y
}

fn main() {
    let x: i8 = 15;
    let y: i16 = 1000;

    println!("{x} * {y} = {}", multiply(x, y));
}

Rust 整數型別全都會實作 From<T>Into<T> 特徵,方便我們在兩者間轉換。From<T> 特徵有單一的 from() 方法;同樣地,Into 特徵也有單一的into()` 方法。實作這些特徵,是型別表示自身可轉換為另一種型別的方式。

標準程式庫會內有 From<i8> for i16 實作項目,這表示我們可以呼叫 i16::from(x),將類型 i8 的變數 x 轉換為 i16。或者,更簡單的方法是使用 x.into(),因為 From<i8> for i16 實作會自動建立 Into<i16> for i8 的實作。

這同樣適用於您自身型別專屬的 From 實作,因此只要實作 From,就能自動取得相應的 Into 實作。

  1. 執行上述程式,並查看編譯器錯誤。

  2. 更新上述程式碼,使用 into() 執行轉換。

  3. xy 的型別變更為其他型別 (例如 f32booli128),查看這些型別可以轉換成其他哪些型別。不妨試著將小型別轉換成大型別,反之亦然。接著參閱標準程式庫說明文件,瞭解系統是否已為您查看的配對實作 From<T>