Aprende Rust · Guía 7 de 8 · 2 min
Los errores del compilador más comunes, y cómo resolverlos
Guía rápida de E0382, E0499, E0502, E0106, E0597 y E0308, con su causa y solución.
Todos estos errores son reales, y los verás en tus primeras semanas. Para cualquier otro, ejecuta rustc --explain E0382 con su código, o consulta el índice oficial.
E0382: uso de un valor movido
error[E0382]: borrow of moved value: `a`
Causa: el valor cambió de dueño y seguiste usando la variable anterior.
Solución: presta el valor con &, o usa .clone() si de verdad necesitas dos copias.
E0502: préstamo de lectura y escritura a la vez
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
Causa: intentas modificar algo mientras todavía se usa una referencia de lectura.
Solución: termina de usar la referencia antes de modificar, o copia el dato que necesitas.
E0499: dos préstamos de escritura
error[E0499]: cannot borrow `s` as mutable more than once at a time
Causa: hay dos referencias &mut activas sobre el mismo valor.
Solución: usa una, termina con ella, y después usa la otra.
E0106: falta un lifetime
error[E0106]: missing lifetime specifier
Causa: una función devuelve una referencia, y Rust no puede deducir de cuál parámetro proviene.
Solución: indícalo con un lifetime, o devuelve un valor propio como String:
fn mas_largo<'a>(a: &'a str, b: &'a str) -> &'a str {
if a.len() > b.len() { a } else { b }
}
E0597: el valor no vive lo suficiente
error[E0597]: `s` does not live long enough
Causa: una referencia sobrevive al valor al que apunta.
Solución: declara el valor en un alcance más amplio, o devuelve el valor en lugar de una referencia.
E0308: tipos que no coinciden
error[E0308]: mismatched types
Causa: el valor no tiene el tipo esperado. Es frecuente al confundir &str y String.
Solución: convierte de forma explícita, con .to_string() o .parse(), según el caso.