RustPrincipiante8 oct 2025
¡El tamaño SÍ importa... a veces! 📏
snippet.rust
fn main() {
let a: u32 = 5;
let b: u64 = 10;
if a > b {
println!("a es mayor que b");
} else {
println!("a no es mayor que b");
}
}¿Qué crees que imprime?
✅ Salida Esperada
a no es mayor que b⚠️ Salida Real
error[E0308]: mismatched types
--> src/main.rs:5:9
|
5 | if a > b {
| ^^^^^ expected `u32`, found `u64`
|
note: perhaps you need to convert the right-hand side to the type of the left-hand side
--> src/main.rs:5:9
|
5 | if a > b {
| ^^^^^ try:
5 | if a > b as u32 {
| ^^^^^^^¿Por qué pasa esto?
Rust, el guardián de la memoria y los tipos, ¡no se anda con chiquitas! 🛡️ En este caso, intentamos comparar un `u32` (entero sin signo de 32 bits) con un `u64` (entero sin signo de 64 bits). A primera vista, uno podría pensar 'bah, son solo números'. ¡Pero Rust es más estricto que tu abuela con las galletas! 👵
El compilador se queja porque **no permite comparaciones directas entre tipos numéricos de diferente tamaño**. Necesitamos convertir explícitamente uno de los tipos. Si convertimos `b` a `u32`, podríamos tener problemas si `b` es mayor que el máximo valor de `u32`. ¡Ojo con las pérdidas de información! ⚠️ La solución depende del contexto, pero Rust nos obliga a ser conscientes de las implicaciones.
En resumen: Rust no se fía de las conversiones implícitas. ¡Más vale prevenir que lamentar! 🚑
Conceptos relacionados
type-safetynumeric-typescompilation-error