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.