React의 모듈 파일에서 매크로 사용

Nilesh Katuwal 2023년1월30일
  1. 녹 매크로
  2. Rust의 크레이트 전반에 걸친 매크로
  3. Rust의 같은 상자 안의 매크로
React의 모듈 파일에서 매크로 사용

이 기사에서는 Rust의 모듈 파일에서 매크로를 사용하는 방법을 배웁니다.

녹 매크로

Rust는 훌륭한 매크로 지원을 제공합니다. 예를 들어, 매크로를 통해 활성화되는 메타프로그래밍에는 다른 코드를 작성하는 코드 작성이 포함됩니다.

‘매크로’는 기능에 필적하는 기능을 제공하지만 관련 런타임 비용이 없습니다. ‘매크로’는 컴파일 시간에 확장되므로 빌드 시간 비용이 관련됩니다.

Rust 매크로는 C 매크로와 크게 다릅니다. 예를 들어, Rust 매크로는 토큰 트리에 적용되는 반면 C 매크로는 텍스트를 대체합니다.

구문:

*MacroRulesDefinition* :
  `macro_rules` `!` [IDENTIFIER] *MacroRulesDef*
MacroRules :
   MacroRule ( ; MacroRule )* ;?

MacroRule :
   MacroMatcher => MacroTranscriber

Rust의 크레이트 전반에 걸친 매크로

crate에는 모듈 범위의 계층이 포함됩니다. 크레이트 내의 모든 개체에는 모듈 트리 내에서 해당 위치를 나타내는 표준 모듈 경로가 있습니다.

이 트리의 최상위 수준에는 익명 모듈이 있습니다. Rust 소스 파일은 현재 크레이트의 모듈 트리에서 이름과 위치가 외부적으로 정의된 모듈을 지정합니다.

상자 자체의 이름일 수도 있습니다. 모든 소스 파일은 모듈입니다.

그러나 모든 모듈에 소스 파일이 필요한 것은 아닙니다. 모듈 정의는 단일 소스 파일 내에서 계층화될 수 있습니다.

상자 util:

#[macro_export]
macro_rules! foo {
    () => ()
}

사용자 상자:

use util::foo;

foo!();

이 전략을 사용할 때 매크로는 항상 상자의 최상위 수준에 있다는 점에 유의하십시오. foomod bar 내에 포함되어 있더라도 user 크레이트는 여전히 use util::foo;를 작성해야 합니다. use util::bar::foo;가 아닙니다.

pub use를 사용하여 크레이트의 모듈에서 매크로를 내보낼 수 있습니다.

Rust의 같은 상자 안의 매크로

foo::bar!();

mod foo {
    macro_rules! bar {
        () => ()
    }

    pub(crate) use bar;
}

foo::bar!();

매크로를 가져와 pub use를 사용하여 다른 개체로 사용할 수 있습니다. 그리고 기존 방식과 달리 소스 코드 순서에 의존하지 않으므로 매크로가 작성되기 전에 사용할 수 있습니다.

매크로에는 이름과 하나 이상의 규칙이 있습니다. 각 규칙은 일치하는 구문을 설명하는 matcher와 성공적으로 일치하는 호출을 대체할 구문을 설명하는 transcriber의 두 부분으로 구성됩니다.

구분 기호는 일치자와 전사자를 모두 포함해야 합니다. 표현식, 문, 특성, impls, 외래 항목, 유형 및 패턴은 매크로를 통해 확장할 수 있습니다.