Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

지시자

매크로의 인자는 달러 기호 $가 접두사로 붙으며, 지시자(designator)로 타입이 어노테이션됩니다:

macro_rules! create_function {
    // 이 매크로는 지시자 `ident` 인자를 취하여
    // `$func_name`이라는 이름의 함수를 생성합니다.
    // `ident` 지시자는 변수/함수 이름에 사용됩니다.
    ($func_name:ident) => {
        fn $func_name() {
            // `stringify!` 매크로는 `ident`를 문자열로 변환합니다.
            println!("당신은 {:?}()를 호출했습니다",
                     stringify!($func_name));
        }
    };
}

// 위의 매크로를 사용하여 `foo`와 `bar`라는 이름의 함수를 생성합니다.
create_function!(foo);
create_function!(bar);

macro_rules! print_result {
    // 이 매크로는 `expr` 타입의 표현식을 취하여
    // 결과와 함께 문자열로 출력합니다.
    // `expr` 지시자는 표현식에 사용됩니다.
    ($expression:expr) => {
        // `stringify!`는 표현식을 *있는 그대로* 문자열로 변환합니다.
        println!("{:?} = {:?}",
                 stringify!($expression),
                 $expression);
    };
}

fn main() {
    foo();
    bar();

    print_result!(1u32 + 1);

    // 블록도 표현식이라는 점을 기억하세요!
    print_result!({
        let x = 1u32;

        x * x + 2 * x - 1
    });
}

사용 가능한 지시자들의 일부는 다음과 같습니다:

  • block
  • expr은 표현식에 사용됩니다
  • ident는 변수/함수 이름에 사용됩니다
  • item
  • literal은 리터럴 상수에 사용됩니다
  • pat (패턴)
  • path
  • stmt (문장)
  • tt (토큰 트리)
  • ty (타입)
  • vis (가시성 한정자)

전체 목록은 Rust 레퍼런스를 참조하세요.