2017-12-29 29 views
1

Gibt es eine Möglichkeit,„Re-Export“#[macro_use] extern crate ähnlich wie pub use, so dass Benutzer eines Makros Makros müssen nicht manuell diese abhängigen extern crate s hinzufügen?anderen Makro in einem macro_rules Verwendung ohne `extern crate` in Rost zu erfordern

Der Rest der Frage ist ein Beispiel zur Veranschaulichung.

In src/lib.rs, beachten Sie, dass das id Makro das lazy_static Makro verwendet:

#[macro_export] 
macro_rules! id { 
    () => { 
     lazy_static! { 
      static ref NUMBER : std::sync::atomic::AtomicUsize = 
       std::sync::atomic::AtomicUsize::new(0); 
     } 
     return NUMBER.fetch_add(1, std::sync::atomic::Ordering::SeqCst); 
    } 
} 

In examples/example.rs, brauchen wir eine extern crate Zeile für jedes Makro, obwohl wir nur die id Makro direkt mit:

#[macro_use] 
extern crate id_macro; 
#[macro_use] 
extern crate lazy_static; 

fn new_id() -> usize { 
    id!(); 
} 

fn main() { 
    println!("id {}", new_id()); // prints "id 0" 
    println!("id {}", new_id()); // prints "id 1" 
} 

im Beispiel wäre es toll, wenn der Benutzer von id_macroid! ohne zu wissen, über 01 verwenden könnte. Gibt es eine Möglichkeit, extern crate ähnlich pub use "re-export" zu machen, um die folgenden Zeilen von dem Beispiel weg zu gehen?

#[macro_use] 
extern crate lazy_static; 

Antwort

2

Es gibt ein instabiles macro_reexport Attribut.

Allerdings arbeitet Rust daran, dass Makros (2.0) sich wie normale Elemente verhalten, die pub use unterstützen, daher wird dieses Attribut nicht stabil sein und veralten.

+2

Dank @Kornel. Wenn jemand über diese kommt, für 'lazy_static', was ich brauchte, speziell war: ' '' # [Feature (macro_reexport)] # [macro_reexport (lazy_static, __lazy_static_internal, __lazy_static_create)] extern Kiste lazy_static; '' ' Ganz der Bissen! Und natürlich nur noch nachts. –

Verwandte Themen