隱含轉換
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
實作。
-
執行上述程式,並查看編譯器錯誤。
-
更新上述程式碼,使用
into()
執行轉換。 -
將
x
和y
的型別變更為其他型別 (例如f32
、bool
、i128
),查看這些型別可以轉換成其他哪些型別。不妨試著將小型別轉換成大型別,反之亦然。接著參閱標準程式庫說明文件,瞭解系統是否已為您查看的配對實作From<T>
。