ConversÔes
O Rust nĂŁo tem conversĂ”es de tipo implĂcitas, mas suporta conversĂ”es explĂcitas com as
. Essas geralmente seguem a semĂąntica de C onde elas sĂŁo definidas.
fn main() { let value: i64 = 1000; println!("como u16: {}", value as u16); println!("como i16: {}", value as i16); println!("como u8: {}", value as u8); }
Os resultados de as
são sempre definidos no Rust e consistentes em todas as plataformas. Isso pode não corresponder à sua intuição para alterar o sinal ou converter para um tipo menor - verifique a documentação e comente
Converter com as
é uma ferramenta relativamente afiada que é fåcil de usar incorretamente e pode ser uma fonte de bugs sutis à medida que o trabalho de manutenção futuro altera os tipos que são usados ou os intervalos de valores nos tipos. As conversÔes são melhores usadas apenas quando a intenção é indicar truncamento incondicional (por exemplo, selecionar os 32 bits inferiores de um u64
com as u32
, independentemente do que estava nos bits altos).
Para conversĂ”es infalĂveis (por exemplo, u32
para u64
), prefira usar From
ou Into
em vez de as
para confirmar que a conversĂŁo Ă© de fato infalĂvel. Para conversĂ”es falĂveis, TryFrom
e TryInto
estĂŁo disponĂveis quando vocĂȘ deseja lidar com conversĂ”es que se encaixam de maneira diferente daquelas que nĂŁo se encaixam.
Considere fazer uma pausa apĂłs este slide.
as
Ă© semelhante a um cast estĂĄtico do C++. O uso de as
em casos em que os dados podem ser perdidos geralmente Ă© desencorajado, ou pelo menos merece um comentĂĄrio explicativo.
Isso Ă© comum na conversĂŁo de inteiros para usize
para uso como Ăndice.