es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La creación de objetos de rasgos provoca una advertencia del compilador en Rust: los objetos de rasgos sin un `dyn` explícito están en desuso.

Recibo estas advertencias que pronto se convertirán en errores, pero no puedo, por nada del mundo, entender qué debo hacer con la expresión de tipo para eliminarlas.

advertencia: se deprecian los objetos de rasgo sin un `dyn` explícito
  --> src/main.rs:62:46
   |
62 |     let module_store: Arc<dyn modulestore=""> = ModuleStore::new(&write_rs);
   |                                              ^^^^^^^^^^^ ayuda: usa `dyn`: `<dyn modulestore="">`
   |
   = nota: `#[warn(bare_trait_objects)]` está activado de manera predeterminada
   = advertencia: esto se acepta en la edición actual (Rust 2018), ¡pero será un error crítico en Rust 2021!
   = nota: para obtener más información, consulta <https: doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html="">

Tengo varios de estos errores.
Puedes ver el código fuente allí. Puedo anotar los tipos, pero no hace ninguna diferencia. Esto ha estado pendiente durante un tiempo sin encontrar una solución, y he pasado tiempo investigando; espero que alguien pueda ayudarme a identificar mi error aquí.

let module_store: Arc<dyn modulestore=""> = ModuleStore::new(&write_rs);
let module_store = ModuleStore::new(&write_rs);

Puedo anotarlo, pero no importa. ¿Necesito un turbofish o algo así? No me queda claro.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de advertencia sugiere que el uso de objetos trait sin el dyn explícito está obsoleto y pronto se convertirá en un error. Para eliminar estas advertencias, es necesario agregar la palabra clave dyn delante del nombre del trait. En tu código, la línea:

    let module_store: Arc<dyn modulestore=""> = ModuleStore::new(&write_rs);
    

    debe reemplazar:

    let module_store: Arc<modulestore> = ModuleStore::new(&write_rs);
    

    Agregar la palabra clave dyn especifica que el tipo es un objeto trait, lo cual le indica al compilador que este tipo puede representar cualquier tipo que implemente el trait especificado. Sin dyn, el tipo representa una implementación específica del trait, lo cual puede limitar su flexibilidad.

    Note que el uso de & en el código original es incorrecto y debe ser reemplazado por &.

Comments are closed.