Friday 15 May 2015

rust - Use macro across module files -



rust - Use macro across module files -

let's have 2 modules in separate files within same crate, crate has enabled macro_rules. want utilize macros defined in 1 module in module.

// macros.rs #[macro_export] // or not? ineffectual this, afaik macro_rules! my_macro(...) // something.rs utilize macros; // utilize macros::my_macro; <-- unresolved import (for obvious reasons) my_macro!() // <-- how?

i nail compiler error "macro undefined: 'my_macro'"... makes sense; macro scheme runs before module system. how work around that?

the accepted reply not right anymore, here updated 1 (rustc 1.1.0-stable):

#[macro_use] mod foo { macro_rules! bar { () => () } } bar!(); // works

if want utilize macro in same crate, module macro defined in needs attribute #[macro_use].

if, however, want utilize macro in other crates well, macro needs attribute #[macro_export]. if want utilize macros of other crates extern crate xxx; statement needs attribute #[macro_use] import macros crate or #[macro_use(cat, dog)] utilize macros cat , dog.

note: macros can used after have been defined. means not work:

bar!(); #[macro_use] mod foo { macro_rules! bar { () => () } }

more info in this rust book article.

rust

No comments:

Post a Comment