Conversiones Implícitas
Rust no aplicará automáticamente conversiones implícitas entre tipos (a diferencia de C++). Puedes ver un ejemplo de esto en el siguiente programa:
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 los tipos de enteros de Rust implementan los traits From<T>
y Into<T>
para permitirnos realizar conversiones entre ellos. El trait From<T>
tiene un único método from()
y, del mismo modo, el trait Into<T>
tiene un único método into()
. Un tipo expresa que se puede convertir en otro tipo implementando estos traits.
La biblioteca estándar implementa From<i8> for i16
, lo que significa que podemos convertir una variable x
del tipo i8
a i16
llamando a i16::from(x)
. O, más sencillo, con x.into()
, ya que la implementación de From<i8> for i16
crea automáticamente una implementación de Into<i16> for i8
.
Lo mismo se aplica a tus implementaciones From
para tus propios tipos, por lo que basta con implementar From
para obtener la respectiva implementación Into
de forma automática.
-
Ejecuta el programa anterior y observa el error del compilador.
-
Actualiza el código anterior para usar
into()
y realizar la conversión. -
Cambia los tipos de
x
ey
a otros elementos (por ejemplo,f32
,bool
,i128
) para ver qué tipos puedes convertir. Prueba a convertir tipos pequeños en tipos grandes y viceversa. Consulta la documentación de la biblioteca estándar para comprobar si se ha implementadoFrom<T>
en los pares que elijas.