Conversões Implícitas
Rust não aplicará automaticamente conversões implícitas entre os tipos (ao contrário de C++). Você pode ver isso em um programa como este:
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)); }
Todos os tipos inteiros do Rust implementam os traits From<T>
e Into<T>
para nos deixar converter entre eles. O trait From<T>
tem um único método from()
e da mesma forma, o trait Into<T>
tem um único método into()
. A implementação desses traits é como um tipo expressa que pode ser convertido em outro tipo.
A biblioteca padrão tem uma implementação de From<i8> for i16
, o que significa que podemos converter uma variável x
do tipo i8
para um i16
chamando i16::from(x)
. Ou, mais simples, com x.into()
, porque a implementação From<i8> for i16
cria automaticamente uma implementação de Into<i16> for i8
.
O mesmo se aplica às suas próprias implementações de From
para seus próprios tipos, logo é suficiente implementar apenas From
para obter uma respectiva implementação Into
automaticamente.
-
Execute o programa acima e observe o erro de compilação.
-
Atualize o código acima para utilizar
into()
para fazer a conversão. -
Mude os tipos de
x
ey
para outros tipos (comof32
,bool
,i128
) para ver quais tipos você pode converter para quais outros tipos. Experimente converter tipos pequenos em tipos grandes e vice-versa. Verifique a documentação da biblioteca padrão para ver seFrom<T>
está implementado para os pares que você verificar.