Macros 在宏规则中使用另一个宏,而不需要在rust中使用“extern crate”

Macros 在宏规则中使用另一个宏,而不需要在rust中使用“extern crate”,macros,rust,Macros,Rust,是否有一种“重新导出”#[macro_use]外部板条箱的方法类似于发布使用,以便使用宏的宏的用户不必手动添加这些相关的外部板条箱 问题的其余部分是一个例子来说明 在src/lib.rs中,请注意id宏使用的是lazy\u static宏: #[macro_export] macro_rules! id { () => { lazy_static! { static ref NUMBER : std::sync::atomic::Atomic

是否有一种“重新导出”
#[macro_use]外部板条箱
的方法类似于
发布使用
,以便使用宏的宏的用户不必手动添加这些相关的
外部板条箱

问题的其余部分是一个例子来说明

src/lib.rs
中,请注意
id
宏使用的是
lazy\u static
宏:

#[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);
    }
}
examples/example.rs
中,每个宏都需要一个
extern板条箱
行,即使我们只是直接使用
id
宏:

#[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"
}
在本例中,如果
id\u宏
的用户可以使用
id而不知道
惰性\u static
。是否有一种“再出口”
extern-crater
的方法类似于
pub-use
,以使下面的行远离示例

#[macro_use]
extern crate lazy_static;
有一个不稳定的属性


但是,Rust正在努力使宏()的行为类似于支持
发布使用的普通项目,因此此属性将不稳定,并将过时。

谢谢@Kornel。如果有人遇到这个问题,对于
lazy\u static
,我特别需要的是:
#![功能(宏重新导出)]#[宏重新导出(惰性静态、惰性静态、惰性静态内部、惰性静态创建)]外部板条箱惰性静态真是太多了!当然,现在只在晚上编译。