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::SomeTraiten 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.