world libro language hello example documentacion aprender macros rust

macros - libro - rust language



¿Usando $ crate en las macros de procedimiento de Rust? (2)

Basado en las respuestas de https://github.com/rust-lang/rust/issues/38356#issuecomment-412920528 , parece que no hay manera de hacer esto (a partir de 2018-08), ni referirse al proc -Macro de la caja ni para referirse a ninguna otra caja de forma inequívoca.

Sé cuál es la variable $crate , pero por lo que puedo decir, no se puede utilizar dentro de macros de procedimiento. ¿Hay otra manera de lograr un efecto similar?

Tengo un ejemplo que casi me obliga a escribir algo como esto usando quote y Rust nocturno

quote!( struct Foo { bar: [SomeTrait;#len] } )

Necesito asegurarme de que SomeTrait esté dentro del alcance ( #len hace referencia a un entero que está fuera del alcance del fragmento).

Estoy usando macros de procedimiento 2.0 todas las noches usando cotización y sincronización porque proc-macro-hack no me funcionó. Este es el ejemplo que estoy tratando de generalizar.


En la Edición 2015 (Rust clásico), puedes hacer esto (pero es intrépido):

  • use ::defining_crate::SomeTrait en la macro
  • dentro de cajas de terceros, dependiendo de defining_crate , lo anterior funciona bien
  • dentro de defining_crate , agregue un módulo en la raíz:

    mod defining_crate { pub use super::*; }

En la Edición 2018 se requieren aún más soluciones de #55275 (consulte este problema ), aunque #55275 puede darnos una solución sencilla.