2017-12-29 52 views
1

매크로를 사용하는 매크로 사용자가 직접 extern crate을 종속 항목에 추가 할 필요가 없도록 #[macro_use] extern cratepub use과 비슷한 방법으로 다시 내보낼 수 있습니까?녹스름한 상태에서 '외부 상자'를 요구하지 않고 macro_rules에 다른 매크로 사용

나머지 질문은 예시입니다. src/lib.rs에서

id 매크로가 lazy_static 매크로를 사용하고 있습니다 : 우리가 직접 매크로 id를 사용하더라도

#[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 crate 라인이 필요합니다

id_macro의 사용자가 약 01 모르고 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" 
} 

, 그것은 좋은 것입니다. 다음 줄을 예제에서 벗어나게하려면 pub use과 비슷한 extern crate과 비슷한 "다시 내보내기"방법이 있습니까?

#[macro_use] 
extern crate lazy_static; 

답변

2

불안정한 macro_reexport 속성이 있습니다.

그러나 녹 (2.0)은 pub use을 지원하는 일반 항목처럼 동작하므로이 특성은 안정적이지 않으며 쓸모 없게됩니다.

+2

감사합니다. @Kornel. 사람이 lazy_static''의 경우,이 건너 오면, 내가 특별히 필요한 것은이었다! '''# [기능 (macro_reexport)] # [macro_reexport (lazy_static, __lazy_static_internal, __lazy_static_create)] 통근 상자의 lazy_static;''' 꽤 입소문! 물론 지금은 야간에만 컴파일됩니다. –