測試

Rust 沒有「隱含」型別的轉換,但支援使用 as 明確轉換。後者通常會遵循定義前者時所用的 C 語意。

fn main() {
    let value: i64 = 1000;
    println!("as u16: {}", value as u16);
    println!("as i16: {}", value as i16);
    println!("as u8: {}", value as u8);
}

在 Rust 中,as 的結果「一律」會經過定義,且在不同平台間保持一致。這可能不符合您變更符號或轉換到較小型別時的直觀做法,請檢查文件並加註說明內容。

雖然使用 as 進行型別相當簡單,但是非常容易出錯;舉例來說,如果往後的維護作業改變了所用型別或型別中值的範圍,這常常就是某些細微錯誤的來源。只有在意圖用於指明無條件截斷時,我們才建議使用型別轉換。舉例來說,如果無論高位元中的內容為何,您都只需要 u64 的底部 32 位元,就可以使用 as u32

如果是 u32u64 這類絕對無誤的型別轉換,適合先使用 FromInto (而非 as) 確認轉換確實無誤。對於容易出錯的轉換,如果您想以不同的方式處理,可以使用 TryFromTryInto

This slide should take about 5 minutes.

建議在講解完這張投影片後休息片刻。

as 類似於 C++ 的靜態轉換。一般不建議在資料可能遺失的情況下使用 as,如果要用,也至少要提供說明註解。

這在將整數轉換為 usize 以用做索引時很常見。