測試
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
。
如果是 u32
到 u64
這類絕對無誤的型別轉換,適合先使用 From
或 Into
(而非 as
) 確認轉換確實無誤。對於容易出錯的轉換,如果您想以不同的方式處理,可以使用 TryFrom
和 TryInto
。
This slide should take about 5 minutes.
建議在講解完這張投影片後休息片刻。
as
類似於 C++ 的靜態轉換。一般不建議在資料可能遺失的情況下使用 as
,如果要用,也至少要提供說明註解。
這在將整數轉換為 usize
以用做索引時很常見。