Error al utilizar traits en Rust

Publicado por Brisa
hace 5 meses

Hola a todos,

Estoy teniendo problemas para implementar un trait en Rust y me gustaría solicitar su ayuda para resolver este error. He creado un trait llamado "Volador" que tiene un método llamado "volar". Quiero implementar este trait en la estructura "Ave", pero el compilador me muestra un error. Aquí está el código:

trait Volador {
    fn volar(&self);
}

struct Ave {
    nombre: String,
}

impl Volador for Ave {
    fn volar(&self) {
        println!("El ave {} está volando.", self.nombre);
    }
}

fn main() {
    let ave = Ave {
        nombre: String::from("Colibrí"),
    };

    ave.volar();
}

Error que obtengo:

error[E0596]: cannot borrow `*self` as mutable, as `self` is not declared as mutable
  --> main.rs:12:5
   |
11 |     fn volar(&self) {
   |               ----- use `&mut self` here to make mutable
12 |         println!("El ave {} está volando.", self.nombre);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable

¿Podrían ayudarme a entender por qué estoy obteniendo este error y cómo puedo solucionarlo?

¡Muchas gracias de antemano por su ayuda!

Traits Error Implementación
Respuesta de Gordon Shumway
hace 5 meses

¡Hola Brisa!

El error que te está apareciendo es un poco confuso, pues parece sugerir que necesitas un &mut self para poder imprimir el nombre del ave, lo cual no es cierto. En Rust, el imprimir valores de un tipo que implementa el trait Display (como el String) no requiere mutabilidad.

Sin embargo, el error que te ha dado el compilador no está realmente relacionado con la necesidad de mutabilidad en este contexto. Es posible que haya habido un error en la transcripción del mensaje. El código que has proporcionado debería compilar correctamente sin errores sobre mutabilidad, asumiendo que se está utilizando la versión estable de Rust y que no hay otros fragmentos de código que no hayas mostrado que puedan influir en el resultado.

Verifica que estás utilizando el código exactamente como lo has publicado aquí. Además, asegúrate de que estés compilando el programa con una versión reciente del compilador de Rust (rustc). Puedes chequear tu versión de rustc utilizando el comando:

rustc --version

Si después de verificar esto continúas teniendo problemas, trata de eliminar el archivo Cargo.lock y el directorio target/ y luego compila tu programa nuevamente. A veces, un estado corrupto en el entorno de compilación puede causar errores inesperados.

Si realizaste alguna modificación en el código que no esté presente en tu publicación, te recomendaría que compartas esos cambios adicionales para poder ayudarte de manera más precisa.

En resumen, el código que has compartido no debería dar error por mutabilidad como sugiere el mensaje, así que verifica bien tu entorno y las versiones que utilizas. ¡Espero que esto te sea de ayuda!