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