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
xeya 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.